LC1-Two Sum
https://leetcode.com/problems/two-sum/
给出一个数组nums和一个值target,求数组里的两个数加起来恰好为target,返回这两个数的下标。
O(N2)解法:
暴力枚举数组里的所有二元组
O(N)解法:
当我们遍历数组nums时,对于nums[i],我们只需知道target-nums[i]是否也存在于数组中即可
我们先维护一个map,它存储了每个数值在nums中的下标,维护时可以对之前存储的下标进行覆盖
对于nums[i],我们在map中查询target-nums[i],如果找到,即为正确答案
需要注意的是nums数组中一个数不能被用两次,所以在map中找到后,还需要判断map中存储的下标是否也为i
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& nums, int target) { 4 vector<int> ret(2,0); 5 map<int,int> m; 6 int len = nums.size(); 7 for(int i=0;i<len;i++){ 8 m[nums[i]] = i; 9 } 10 for(int i=0;i<len;i++){ 11 if(m[target-nums[i]]&&m[target-nums[i]]!=i){ 12 ret[0] = i; 13 ret[1] = m[target-nums[i]]; 14 } 15 } 16 17 return ret; 18 } 19 };

浙公网安备 33010602011771号