今天开始刷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写的