输入:一个数组 nums 和一个目标值 target
要求:找到两个数,使它们的和等于 target,并返回这两个数的下标(不能重复使用同一个元素)
输出:一个长度为 2 的数组,例如 [i, j]
思路:把需要的结果和本身都存入哈希表。
对每个数字 nums[i]:
-
计算它需要的补数:
need = target - nums[i] -
检查补数是否已经在哈希表中出现过。
-
如果出现过,找到答案,直接返回
-
如果没出现,则把当前数字存进哈希表
mp[nums[i]] = i
因为每个数只会扫一遍,所以速度非常快。
复杂度:
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for (int i = 0; i < nums.size(); i++) {
int need = target - nums[i];
if (mp.count(need)) {
return {mp[need], i};
}
mp[nums[i]] = i;
}
return {};
}
};
4594

被折叠的 条评论
为什么被折叠?



