https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/

1. Use brute force:

  1. //12 ms 9.9 MB
  2. class Solution {
  3. public:
  4. vector<int> twoSum(vector<int>& numbers, int target) {
  5. vector<int> result;
  6. int l = 0, r = numbers.size() - 1;
  7. while(l < r && numbers[l] + numbers[r] != target){
  8. if(numbers[l] + numbers[r] > target)
  9. r--;
  10. else if(numbers[l] + numbers[r] < target)
  11. l++;
  12. }
  13. result.push_back(l + 1);
  14. result.push_back(r + 1);
  15. return result;
  16. }
  17. };

2. Use binary search:

  1. //8 ms 9.6 MB
  2. class Solution {
  3. public:
  4. vector<int> twoSum(vector<int>& numbers, int target) {
  5. vector<int> result;
  6. int diff, second_l, second_r, median;
  7. for(int first = 0; first < numbers.size() - 1; first++) {
  8. diff = target - numbers[first];
  9. second_l = first + 1;
  10. second_r = numbers.size() - 1;
  11. median = second_r;
  12. while(second_l < second_r){
  13. if(numbers[median] == diff){
  14. break;
  15. }
  16. median = second_l + (second_r - second_l)/2;
  17. if(numbers[median] > diff)
  18. second_r = median;
  19. else if(numbers[median] < diff)
  20. second_l = median + 1;
  21. }
  22. if(numbers[median] == diff){
  23. return vector<int>{first+1, median+1};
  24. }
  25. }
  26. return {};
  27. }
  28. };