最开始的算法因为复杂度为O(n2),在Run Code时发生heap-buffer-overflow。最开始的算法如下:
class Solution{
public:
vector<int> twoSum(vector<int>&nums, int target){
vector<int> twoSum;
for(int i=0; i<nums.size(); i++){
for(int j=i+1;j<nums.size();j++){
if((nums[i] + nums[j])==target){
twoSum.push_back(i);
twoSum.push_back(j);
}
}
}
return twoSum;
}
}
经过修改,下面两种算法都可以运行通过。
//哈希表
vector<int> twoSum(vector<int> &nums, int target){
vector<int> twoSum;
map<int, int> tmpmap;
for(int i=0;i<nums.size();i++){
tmpmap[nums[i]] = i;
}
for(int i=0; i<nums.size(); i++){
if(tmpmap.count(target - nums[i]) != 0 && tmpmap[target-nums[i]] != i){
twoSum.push_back(i);
twoSum.push_back(tmpmap[target - nums[i]]);
break;
}
}
return twoSum;
}
//哈希表优化版
vector<int> twoSum(vector<int> &nums, int target){
vector<int> twoSum;
map<int, int> tmpmap;
for(int i=0; i<nums.size(); ++i) {
if(tmpmap.count(nums[i]) != 0) {
twoSum.push_back(tmpmap[nums[i]]);
twoSum.push_back(i);
break;
}
tmpmap[target - nums[i]] = i;
}
return twoSum;
}