1.两数之和(Two Sum)

给定一个整数数列,找出其中和为特定值的那两个数。

你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路1:暴力法  时间复杂度O(n^2)

当前元素与其后元素之和与target比较,相等则输出这两个元素的索引,否则当前元素继续与下一个元素求和再与target比较。

    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        for(int i=0;i<nums.size();++i){
            for(int j=i+1;j<nums.size();++j){
                if(nums[i]+nums[j]==target){
                    ans.push_back(i);
                    ans.push_back(j);
                    break;
                }
            }
            if(!ans.empty()){
                break;
            }
        }
        return ans;  
    }

思路2:建立map数据

vector<int> two Sum(vector<int>& nums,int target){
    int size=nums.size();
    if(size==0){
        throw "Invalid input";
    }
  unorder_map<int,int> rec;
  vector<int> res;
  for(int i=0;i<size;i++){
    int compensate=target-nums[i];
    if(rec.find(compensate)!=rec.end()){
      res.push_back(rec[compensate]);
      res.push_back(rec(i));
      return res; 
    }
    rec[nums[i]]=i;
  }
}

 

posted @ 2018-04-10 14:51  down_to_earth  阅读(187)  评论(0编辑  收藏  举报