Given an array of integers, find two numbers such that they add up to a specific target number.
Output: index1=1, index2=2
1. 从所给的列表中找出两个数,这两个数的和与给定的target值相同,返回这两个值的位置(保持相对顺序)
2. 所给测试用例保证有且只有一个唯一解
1. 绑定值和对应的位置 复杂度O(n)
2. 对值进行升序排序 复杂度O(nlogn)
3. 用两个指针p1,p2分别从前后两个方向逼近target。
当两指针之和小于target,则p1++
当两指针之和大于target,则p2--
struct Node{
int index;
int value;
Node(){};
Node(int i, int v):index(i), value(v){};
};
bool compare(const Node &n1, const Node &n2){
return n1.value < n2.value;
}
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<Node> nodes;
for(int i=0; i<numbers.size(); i++){
nodes.push_back(Node(i+1, numbers.at(i)));
}
sort(nodes.begin(), nodes.end(), compare);
int p1 = 0;
int p2 = nodes.size() - 1;
vector<int> indexs;
while(p1 < p2){
int sum = nodes.at(p1).value + nodes.at(p2).value;
if(sum == target){
indexs.push_back(min(nodes.at(p1).index, nodes.at(p2).index));
indexs.push_back(max(nodes.at(p1).index, nodes.at(p2).index));
break;
}
else{
if(sum < target) p1++;
else p2--;
}
}
return indexs;
}
};LeetCode-001 Two Sum,布布扣,bubuko.com
原文地址:http://blog.csdn.net/harryhuang1990/article/details/25704515