leetcode two nums c++实现

来源:互联网 发布:mac用什么浏览器 编辑:程序博客网 时间:2024/06/06 20:00

先直接粘贴原题:
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(),以及各种错字或者语法的错误比比皆是。感触颇深,觉得要加强这方面的训练。

原创粉丝点击