今天开始刷LeetCode,原来都是在各大ACM的oj上刷题,第一次接触LeetCode
刚开始写代码时候有点不习惯,选择执行代码时报错(error: control reaches end of non-void function [-Werror=return-type]),在网上查原因原来是函数结束没有返回值(然并卵)加上了就可以了。
第一种写法如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int len = nums.size(); vector<int> ans; for(int i=0; i<len; i++){ for(int j=i+1; j<len; j++){ if(nums[i] + nums[j] == target){ ans.push_back(i); ans.push_back(j); return ans; } } } return ans; } };这种暴力算法缺点是费时,但对于本题来说他的空间复杂度不高,总是时间复杂度还可以接受吧。
第二种写法如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { map<int, int> ma; vector<int> ans; int k = 0, ind = 0; for(auto it:nums) ma[it] = ++k; for(auto it:nums){ ++ind; if(ma[target-it] > 0 && ma[target-it] != ind){ ans.push_back(ind-1); ans.push_back(ma[target-it]-1); return ans; } } return ans; } };用了STL的map函数,时间复杂度降了下来,但是空间复杂度上来了,总之各有优缺点。
具体提交情况如下:
上面的是暴力写的,下面的是map写的
