LeetCode: Two Sum

思路:先排序,然后用两个下标指示头尾进行搜索,时间复杂度最快要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)的复杂度



你可能感兴趣的:(LeetCode: Two Sum)