思路:先排序,然后用两个下标指示头尾进行搜索,时间复杂度最快要O(nlg(n)),即排序的复杂度。
struct Node{
int number;
int index;
};
bool compare(Node a,Node b){
return a.number < b.number;
}
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<Node> node;
int len = numbers.size();
for(int i = 0;i<len;i++){
Node n;
n.index = i+1;
n.number = numbers[i];
node.push_back(n);
}
sort(node.begin(),node.end(),compare);
int index1 = 0, index2 = len-1;
while(1){
if(index1 > index2)break;
if(node[index1].number + node[index2].number == target){
index1 = node[index1].index;
index2 = node[index2].index;
break;
}
else if(node[index1].number + node[index2].number < target)
index1++;
else
index2--;
}
vector<int> ret;
int small = min(index1,index2);
int big = max(index1,index2);
ret.push_back(small);
ret.push_back(big);
return ret;
}
};
此外,可以用hash表降到O(n)的复杂度