代码改变世界

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在原始数组中的位置即可
    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. };