码迷,mamicode.com
首页 > 其他好文 > 详细

Two Sum

时间:2015-03-29 22:08:54      阅读:121      评论:0      收藏: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在原始数组中的位置即可
    1. class Solution {
    2. public:
    3. vector<int> twoSum(vector<int> &numbers, int target) {
    4. vector<int> num = numbers;
    5. sort(num.begin(),num.end());
    6. int head = 0, tail = num.size() - 1;
    7. int tmpRes=0;
    8. for (size_t i = 0; i < num.size(); i++)
    9. {
    10. tmpRes = num[head] + num[tail];
    11. if ( tmpRes > target)
    12. {
    13. tail--;
    14. continue;
    15. }
    16. if (tmpRes < target)
    17. {
    18. head++;
    19. continue;
    20. }
    21. if (tmpRes == target)
    22. {
    23. break;
    24. }
    25. }
    26. vector<int> resVec;
    27. head = num[head];
    28. tail = num[tail];
    29. for (size_t i = 0; i < numbers.size(); i++)
    30. {
    31. if (numbers[i] == head || numbers[i] == tail)
    32. {
    33. resVec.push_back(i+1);
    34. }
    35. if (resVec.size() == 2)
    36. break;
    37. }
    38. return resVec;
    39. }
    40. };




Two Sum

标签:

原文地址:http://www.cnblogs.com/flyjameschen/p/4376486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!