Leetcode 1. 两数之和

题源: 1. 两数之和

方法:哈希表

利用哈希表(在C++中是 unordered_map),我们可以在一次遍历中完成查找。哈希表提供了快速的查找时间,这对于本题的需求来说非常有效。

解题步骤

  1. 初始化哈希表

    • 创建一个 unordered_map<int, int>,其中键(key)为数组元素的值,值(value)为对应的索引。
  2. 遍历数组

    • 遍历数组 nums 的每个元素,并在每个迭代中执行以下操作:
      • 使用 target - nums[i] 计算出与当前元素 nums[i] 相配对的目标元素值。
      • 使用 map.find(target - nums[i]) 尝试在哈希表中查找上述目标元素值。
      • 如果找到了,说明之前已经遍历过与当前元素配对的目标元素,使用 iter->second 获取该元素的索引,与当前元素的索引 i 一起返回。
      • 如果没有找到,将当前元素及其索引作为一对键值对插入到哈希表中,以备后续查找时使用。
  3. 返回结果

    • 如果在遍历过程中找到了符合条件的两个数,函数返回这两个数的索引组成的列表 {iter->second, i}
    • 如果遍历结束仍未找到符合条件的数,返回空列表 {}

代码分析

这种方法有效地将问题的时间复杂度降到了 O(n),因为每个元素只需遍历一次,并在哈希表中进行常数时间的查找。空间复杂度为 O(n),用于存储哈希表。

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。每个元素查找操作的时间复杂度近似为 O(1)。
  • 空间复杂度:O(n),最坏的情况下,哈希表中存储了数组 nums 中的所有元素和它们的索引。

示例

假设 nums = [2, 7, 11, 15]target = 9

  • 遍历到数字 2 时,检查 9 - 2 = 7 是否在哈希表中,不在,则将 2 及其索引 0 加入哈希表。
  • 遍历到数字 7 时,检查 9 - 7 = 2 已在哈希表中,找到了一个解(数字 2 和 7),函数返回它们的索引 [0, 1]

Code

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map <int,int> map;
        for(int i = 0; i < nums.size(); i++) {
            auto iter = map.find(target - nums[i]); 
            if(iter != map.end()) {
                return {iter->second, i};
            }
            map.insert(pair<int, int>(nums[i], i)); 
        }
        return {};
    }
};
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值