Skip to content

Latest commit

 

History

History
59 lines (52 loc) · 1.35 KB

twosumIII.md

File metadata and controls

59 lines (52 loc) · 1.35 KB

题目描述:

image

解题过程:

不超过5分钟

  • 二分查找
  • 双指针

代码:(二分查找→双指针)

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int ans = -1;
        int n = numbers.size();
        int right = n - 1;
        for (int i = 0; i < n - 1; ++i) {
            int left = i + 1;
            int x = numbers[i];
            while (left <= right) {
                int mid = (left + right) >> 1;
                if (numbers[mid] <= target - x) {
                    left = mid + 1;
                    ans = mid;
                } else {
                    right = mid - 1;
                }
            }
            if (x + numbers[ans] == target) {
                return {i + 1, ans + 1};
            }
        }
        return {};
    }
};
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int ans = -1;
        int n = numbers.size();
        int i = 0, j = n - 1;
        while (numbers[i] + numbers[j] != target) {
            if (numbers[i] + numbers[j] > target) {
                --j;
            } else if (numbers[i] + numbers[j] < target) {
                ++i;
            }
        }
        return {i + 1, j + 1};
    }
};