链接
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
;
}
};