第一种方法暴力破解法,时间复杂度是O(n^2),会TLE。
vector<int> Solution::twoSum(vector<int>& nums, int target) {
int i, j;
vector<int> indices;
for(i=0; i<nums.size(); i++){
for(j=i+1; j<nums.size(); j++){
if(nums[i] + nums[j] == target){
indices.push_back(i);
indices.push_back(j);
}
}
}
return indices;
}
第二种方法可以用双指针,先对所有的数进行一个排序,时间复杂度为O(nlgn)
vector<int> Solution::twoSum(vector<int>& nums, int target) {
// 双指针法
vector<int> sorted(nums); //sorted包含numbers所有元素的副本
sort(sorted.begin(), sorted.end() );
int size = nums.size();
int left=0, right=size-1, sum=0;
vector<int> indices;
while( left < right ){
sum = sorted[left] + sorted[right];
if( sum == target ){
for(int i=0; i<size; i++){
if(nums[i]==sorted[left])
indices.push_back(i);
else if(nums[i] == sorted[i])
indices.push_back(right);
}
break;
}
else if( sum < target )
left++;
else
right--;
}
return indices;
}