本文参考代码随想录
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
本题需要记录遍历过的数组和对应的下标,因此需要用到map。数组中的元素作为key,对应的下标作为value
遍历数组时,在map里查找是否有和当前元素匹配的元素,如果有则找到一对符合的值,直接返回。如果没有则把当前元素加入map
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++) {
// 遍历当前元素,并在map中寻找是否有匹配的key
auto iter = map.find(target - nums[i]);
if(iter != map.end()) {
return {iter->second, i};
}
// 如果没找到匹配对,就把访问过的元素和下标加入到map中
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};
时间复杂度、空间复杂度均为O(1)