先排序,然后夹逼,和以前的某题有点像,惟一的问题是我好不容易千辛万苦学会了快排
结果居然超时了... 然后我又提交了好多次,结果居然过了 == 哎 我会记得这题回来用更好的方法的
先附上超时代码:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<int> index(numbers);
vector<int> result;
int i,j;
i = 0;j = index.size()-1;
for(int m = 1;m<=index.size();++m){
index[m-1] = m;
}
quickSort(numbers,index,0,index.size()-1);
while(numbers[i]+numbers[j]!=target){
if(numbers[i]+numbers[j]>target) i++;
if(numbers[i]+numbers[j]<target) j--;
}
result.push_back(index[i]<index[j]?index[i]:index[j]);
result.push_back(index[i]>=index[j]?index[i]:index[j]);
return result;
}
void quickSort(vector<int> &numbers,vector<int> &index,int start,int end){
if(start<end){
int sort = numbers[start];
int temp = index[start];
int i = start;
int j = end;
while(i<j){
while(numbers[j]<=sort&&j>i){
--j;
}
if(i<j){
numbers[i] = numbers[j];
index[i] = index[j];
i++;
}
while(numbers[i]>sort&&i<j){
++i;
}
if(i<j){
numbers[j] = numbers[i];
index[j] = index[i];
j--;
}
}
numbers[i] = sort;
index[i] = temp;
quickSort(numbers,index,start,i-1);
quickSort(numbers,index,i+1,end);
}
}
};