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 };
代码
posted @ 2020-05-24 12:55  Osoii  阅读(90)  评论(0)    收藏  举报