天天看点

167. 两数之和 II - 输入有序数组(Easy)题目我的题解

题目

题目及示例

我的题解

二分查找

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left;
        int right;
        int mid = 1;
        for (int i = 0; i < numbers.length; i++) {
            left = i + 1;
            right = numbers.length - 1;
            while (left <= right) {
                mid = left + (right - left) / 2;
                if (target - numbers[i] < numbers[mid]) {
                    right = mid - 1;
                } else if (target - numbers[i] > numbers[mid]) {
                    left = mid + 1;
                } else {
                    break;
                }
            }
            if (left <= right) {
                return new int[] {i+1, mid+1};
            }
        }
        return new int[] {mid, mid + 1};
    }
}
           

双指针

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left = 0;
        int right = numbers.length - 1;
        while (left < right) {
            if (numbers[left] + numbers[right] == target) {
                return new int[] {left + 1, right + 1};
            } else if (numbers[left] + numbers[right] > target) {
                right--;
            } else {
                left++;
            }
        }
        return new int[2];
    }
}