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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值