Two Sum
2015-03-29 21:55 笨笨的老兔子 阅读(123) 评论(0) 收藏 举报给定一个数组和一个目标整数,已知这个目标整数一定等于给定数组中的某两个数字相加,求这两个数字在数组中的位置。
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
思路
对这个数组做拷贝,然后进行排序,设定两个指针head和tail,如果
- head+tail>target则tail--
- head+tail<target则head++
最终一定能够得到需要的head和tail的值,然后再去找head和tail在原始数组中的位置即可class Solution {public:vector<int> twoSum(vector<int> &numbers, int target) {vector<int> num = numbers;sort(num.begin(),num.end());int head = 0, tail = num.size() - 1;int tmpRes=0;for (size_t i = 0; i < num.size(); i++){tmpRes = num[head] + num[tail];if ( tmpRes > target){tail--;continue;}if (tmpRes < target){head++;continue;}if (tmpRes == target){break;}}vector<int> resVec;head = num[head];tail = num[tail];for (size_t i = 0; i < numbers.size(); i++){if (numbers[i] == head || numbers[i] == tail){resVec.push_back(i+1);}if (resVec.size() == 2)break;}return resVec;}};
浙公网安备 33010602011771号