Skip to content

Latest commit

 

History

History
66 lines (45 loc) · 1.77 KB

两数之和-输入有序数组.md

File metadata and controls

66 lines (45 loc) · 1.77 KB

两数之和-输入有序数组

题目描述

给定一个已经排好顺序的整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9,返回 [0, 1]

示例 2

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3

输入:nums = [3,3], target = 6

输出:[0,1]

提示

  • 2 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= target <= 10^9
  • 只会存在一个有效答案

解题思路

  • 暴力做法:采用两层循环的方式,依次遍历数组,直至找到相加等于target的2个数
def Solution1(nums, target):
    for i in range(len(nums)):
        for j in range(i+1,len(nums)):
            if nums[i] + nums[j] == target:
                return [i,j]
  • 双指针做法:利用数组已经排好序的性质。
def Solution2(nums, target):
    left = 0
    right = len(nums) - 1
    while left < right:
        if nums[left] + nums[right] == target:
            return [left,right]
        if nums[left] + nums[right] < target:
            left += 1
        else:
            right -= 1
    return None
  • 两个指针分别指向数组首尾,相加。结果有两种情况,如果相加> target,则说明right指针指向的数太大,需要左移;如果< target,则说明left指针指向的数太小,需要右移。如果相等,则返回结果。
  • 时间复杂度O(n),空间复杂度O(1)