https://leetcode.com/problems/two-sum/
基本思路是做一个hanshmap,然后迭代查询/插入这个hashmap。时间复杂度是O(n),空间复杂度也是O(n)。下文给出了C++和python的代码,python的代码非常简洁,只有7行。
struct Solution {
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
if(nums.empty() || nums.size()<2)
return res;
std::unordered_map<int, int> hashmap;
for(int i=0;i<nums.size();i++) {
if(hashmap.find(target-nums[i])!=hashmap.end()) {
res.push_back(hashmap[target-nums[i]]);
res.push_back(i);
return res;
}
hashmap[nums[i]] = i;
}
return res;
}
};
class Solution:
def twoSum(self, nums, target):
lookup = dict(((v, i) for i, v in enumerate(nums)))
return next(( [i, lookup.get(target-v)]
for i, v in enumerate(nums)
if lookup.get(target-v, i) != i), None)