leetcode two nums c++实现

先直接粘贴原题:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
翻译成中文意思是:从给定数列nums找两个数相加和为给定的另一个数target。
第一遍想到的当然是两个for循环,对每一个数与另一个数相加若得到答案返回。

这个算法的时间复杂度是o(n*n),显然,真是在面试时给面试官这答案,估计就可以直接联系下家了吧。

第二次想到了用map,因为map的匹配时间复杂度是o(1),所以呢,先已<.nums[i],i>的格式将nums所有数放在map中,再一个个遍历,所要的时间复杂度为o(n),当然空间要求更多了也为o(n)。
当然这个方法有个改进的版本,就是在第一遍塞map的过程中就可以先匹配,如果匹配不到再塞进map中,就更加快速了。
这里直接放改进后的代码:

class Solution {

public:
  vector<int> twoSum(vector<int>& nums,int target){
     vector<int> results;
     map<int,int> compiler ;
     int added = 0;
     for(int i=0;i<nums.size();i++){
       added = target - nums[i];        
     if(compiler.count(added)&&compiler[added]!=i){
          results.push_back(compiler[added]);
          results.push_back(i);
          return results;
         }
     compiler.insert(pair<int,int>(nums[i],i));
   }
        return results;
  }
};

最后说一下第一次做leetcode的感触,直接在上面敲代码发现没有IDE的帮助很容易不记得一些常用方法,比如我总是把nums.size()记成nums.length(),以及各种错字或者语法的错误比比皆是。感触颇深,觉得要加强这方面的训练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值