当前位置: 首页 > article >正文

LeetCode热题100精讲——Top1:两数之和【哈希】

在这里插入图片描述

你好,我是安然无虞。

文章目录

    • 题目背景
    • 两数之和
      • C++解法
      • Python解法

在这里插入图片描述

题目背景

如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第九章·巧解哈希题,用这3种数据类型足矣

两数之和

题目链接:两数之和

在这里插入图片描述

解题思路:

对于一个元素 nums[i],想知道有没有另一个元素 nums[j] 的值为 target - nums[i],这很简单,我们用一个哈希表记录每个元素的值到索引的映射,这样就能快速判断数组中是否有一个值为 target - nums[i] 的元素了.

简单说,数组其实可以理解为一个「索引 -> 值」的哈希表映射,而我们又建立一个「值 -> 索引」的映射即可完成此题.

代码详解:

C++解法

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        // 建立值到索引的映射
        unordered_map<int, int> valToIndex;

        for(int i = 0; i < nums.size(); i++)
        {
            // 查哈希表,看是否有能和 nums[i] 凑出 target 的元素
            int need = target - nums[i];
            if(valToIndex.count(need))
            {
                return {i, valToIndex[need]};
            }

            // 存入val->index的映射
            valToIndex[nums[i]] = i;
        }    

        return {-1, -1};
    }
};

Python解法

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 建立值到索引的映射表
        valueToIndex = {}

        # 遍历列表
        for i in range(len(nums)):
            # 查哈希表, 看是否有能和nums[i]凑出target的元素
            need = target - nums[i]
            if need in valueToIndex:
                return [i, valueToIndex[need]]
                
            # 将need存入value->index的映射表
            valueToIndex[nums[i]] = i
        
        return [-1, -1]

Python代码也可以使用 enumerate() 方法在循环遍历列表的时候可以得到元素索引以及元素本身:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        valToIndex = {}

        for index, val in enumerate(nums):
            need = target - val
            if need in valToIndex:
                return [index, valToIndex[need]]
            
            valToIndex[val] = index

        return [-1, -1]
        
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

http://www.kler.cn/a/597640.html

相关文章:

  • 如何编写一个Spring Boot Starter
  • Ubuntu YOLO5 环境安装
  • UI设计中的大数据可视化:解锁数据背后的秘密
  • 基于深度学习的图像分割项目实践:从理论到应用
  • 基于WebAssembly的浏览器密码套件
  • 【技术选型】三大 Python Web 框架全面对比
  • React学习(进阶)
  • github如何为开源项目作出贡献
  • 为什么后端路由需要携带 /api 作为前缀?前端如何设置基础路径 /api?
  • Python推导式深入解析
  • React Native进阶(六十一): WebView 替代方案 react-native-webview 应用详解
  • 使用外部事件检测接入 CDH 大数据管理平台告警
  • 除自身以外数组的乘积——面试经典150题(力扣)
  • 基于Python+Ollama DeepSeek与MySQL进行数据分析探索
  • Rocky9.5基于sealos快速部署k8s集群
  • OpenHarmony子系统开发 - 电源管理(二)
  • 二进制求和 力扣67
  • AutoSar:软件革命还是技术陷阱?
  • 算法训练营第二十天 | 回溯算法(二)
  • gin中间件学习笔记