题目描述
给定一个整数数组 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)复杂度,是一种非常高效的解决方案。