链接
https://leetcode-cn.com/problems/two-sum/
耗时
解题:8 min
题解:5 min
题意
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
思路
用 hash 表存一下 nums 中存在的整数和它的位置,最后顺序遍历 nums 数组,查询 target-nums[i] 是否存在并且不在当前位置,如果是则找到答案。
时间复杂度: O ( n ) O(n) O(n)
AC代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> unmp;
int n = nums.size();
for(int i = 0; i < n; ++i) {
unmp[nums[i]] = i;
}
vector<int> ans;
for(int i = 0; i < n; ++i) {
if(unmp[target-nums[i]] && unmp[target-nums[i]] != i) {
ans.push_back(i);
ans.push_back(unmp[target-nums[i]]);
break;
}
}
return ans;
}
};