原题链接
思路
可以直接利用两重循环判断是否有和等于
t
a
r
g
e
t
target
target,时间复杂度是
O
(
n
2
)
O(n^2)
O(n2)。
优化方法就是可以利用哈希表,哈希表的实现复杂度是
O
(
1
)
O(1)
O(1),因此对整个数组遍历一遍整体的复杂度是
O
(
n
)
O(n)
O(n)。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// 定义一个哈希表
unordered_map<int, int> heap;
for(int i = 0; i < nums.size(); i++){
int r = target - nums[i];
if(heap.count(r)) return{heap[r], i};
// 有重复的数字下标会被更新,只需要返回一组解
heap[nums[i]] = i;
}
// 根据题意一定有解,此处不会运行到,避免警告任意返回一个vector
return {};
}
};