说明:
这里有一个坑,题目中容易误解为不存在相同的元素。这里如果数组中存在相同的元素也是可以的。
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& nums, int target) { 4 map<int, vector<int>> m; 5 vector<int> res; 6 for (int i = 0; i < nums.size(); ++ i) { 7 m[nums[i]].push_back(i); 8 } 9 for (int i = 0; i < nums.size(); ++ i) { 10 if (nums[i] * 2 == target) { 11 if (m[nums[i]].size() == 2) { 12 res.push_back(m[nums[i]][0]); 13 res.push_back(m[nums[i]][1]); 14 break; 15 } 16 } 17 else if (m.find(target - nums[i]) != m.end()) { 18 res.push_back(i); 19 res.push_back(m[target-nums[i]][0]); 20 break; 21 //return res; 22 } 23 } 24 return res; 25 } 26 };
1 class Solution: 2 def twoSum(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: List[int] 7 """ 8 res = [] 9 num_indices = dict() 10 for index, value in enumerate(nums): 11 if value in num_indices: 12 num_indices[value].append(index) 13 else: 14 num_indices[value] = [index] 15 for k, v in num_indices.items(): 16 if k * 2 == target: 17 if len(v) == 2: 18 res.extend(v) 19 break 20 else: 21 if target - k in num_indices: 22 res.append(v[0]) 23 res.append(num_indices[target - k][0]) 24 break 25 return res