167. 两数之和 II - 输入有序数组

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

解法一:双指针

与1.两数之和 不同之处在于数组有序,因此不需要设哈希map,用左右两个指针,初始指向0和n-1,计算两数之和,若大于target,则右指针左移,若小于则左指针右移,直到找到target(题目假设一定有解),虽然复杂度和哈希map方法都是O(n),但是双指针法比一次遍历快一倍。

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

最后更新于