首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打卡群2刷题总结1001——两数之和 II - 输入有序数组

打卡群2刷题总结1001——两数之和 II - 输入有序数组

作者头像
木又AI帮
发布2020-10-10 10:44:19
2140
发布2020-10-10 10:44:19
举报
文章被收录于专栏:木又AI帮木又AI帮

leetcode第167题:两数之和 II - 输入有序数组

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


【题目】

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

说明:

返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

示例:

输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。

【思路】

1、暴力解法:两轮for循环,遍历所有可能,时间复杂度太高。

2、双指针:只是两个指针i和j分别指向第一个元素和最后一个元素,不断比较nums[i] +nums[j]和target的大小,并移动指针。如果nums[i] +nums[j] == target,返回结果;如果nums[i] +nums[j] > target,则i后移,使得两数和变大;如果nums[i] +nums[j] < target,则j前移,使得两数和变小。

3、hash:遍历数组,判断target - nums[i]是否存在字典d中,存在则返回结果;不存在则将元素及位置存储在字典中,即d[nums[i]] = i。

【代码】

python版本

双指针

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        l, r = 0, len(numbers) - 1
        while l < r:
            # 刚好相等,退出
            if numbers[l] + numbers[r] == target:
                break
            # 和更大,r指针前移
            if numbers[l] + numbers[r] > target:
                r -= 1
            # 和更小,l指针后移
            else:
                l += 1
        
        # 保证有结果,不用再判断是否满足条件
        # 注意,本题返回的下标从1开始
        return [l + 1, r + 1]

hash

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        d = {}
        for i, n in enumerate(numbers):
            if target - n not in d:
                d[n] = i
            else:
                # 注意,本题返回的下标从1开始
                return [d[target - n] + 1, i + 1]
        
        # 保证有结果,可以不用再判断是否满足条件
        return [-1, -1]

【相似题目】

1. 两数之和

方法简述:hash

15. 三数之和

方法简述:排序后,一层for循环+two sum方法

18. 四数之和

方法简述:排序后,两层for循环+two sum方法

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 两数之和
  • 15. 三数之和
  • 18. 四数之和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档