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