LeetCode 167. Two Sum II - Input array is sorted

好家伙,怎么出题的,比 Two Sum I 还要简单

JAVA

双指针 + 二分法

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

while 循环中先用二分法,再用双指针,二分法用于大范围搜索,双指针用于小范围搜索

Python

双指针 + 二分法

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        i, j = 0, len(numbers)-1
        while(i < j):
            m = (i+j) >> 1
            if numbers[i]+numbers[m] > target:
                j = m-1
            elif numbers[m]+numbers[j] < target:
                i = m+1
            elif numbers[i]+numbers[j] < target:
                i += 1
            elif numbers[i]+numbers[j] > target:
                j -= 1
            else:
                return [i+1, j+1]
        return [0, 0]

版权声明:本文为weixin_52542509原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。