Bootstrap

LeetCode 1 - 两数之和

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。

解题思路

这是一道典型的求解两数之和的问题,我们可以利用哈希表来解决。我们可以遍历数组,将每个元素的值和它的索引存储在哈希表中。对于每个元素 nums[i],我们会去检查 target - nums[i] 是否在哈希表中。如果在,那么我们已经找到了目标值,并且可以直接返回结果。

算法实现

C++实现

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::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 {}; 
    }
};

复杂度分析

  • 时间复杂度:O(n),我们只需要遍历一次数组,时间复杂度为O(n)。
  • 空间复杂度:O(n),在最坏的情况下,哈希表中会存储整个数组,空间复杂度为O(n)。

总结

通过利用哈希表来存储数组元素和索引的映射关系,我们可以在O(n)的时间复杂度内解决这个问题。这种方法避免了暴力求解的O(n^2)复杂度,是一种非常高效的解决方案。

;