LeetCode-python 1.两数之和

类型:哈希表、数组、双指针

  • 题目:给定一个整数数组 nums 和一个目标值 target,请你在 该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
    示例:
    给定 nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
  • 用字典保存遍历过的nums数组中的数字(做字典的键)和下标(字典的值),当发现target-nums[i]在字典的键中出现时,返回当前i,与target-nums[i]在字典中的值,即两个下标。
    因为我们需要nums数组的下标,所以将下标当做字典的值而不是键。
    时间/空间都是复杂度O(n)。
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict = {}
        for i in range(len(nums)):
            if target-nums[i] in dict:
                return [dict[target-nums[i]], i]#结果返回所需要的下标
            else:
                dict[nums[i]] = i #字典保存

小知识:1.如果想要检查一个值是否为字典中的键,就可以用关键字 in(或 not in),作用于该字典本身。'color' in spam 本质上是一个简写版本。相当于'color' in spam.keys()。
    2. def 函数中 -> 主要是标记返回值数据类型。
    3.也可采取双指针算法。将数组从小到大排序,若target值小于前、后指针所指数之和,将前指针后移。若大于,将后指针前移。若两指针重合,则查询失败。时间复杂度是 O(nlogn),空间复杂度O(1)。

例如:

>>> spam = {'name': 'Zophie', 'age': 7} 
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys() False
>>> 'color' not in spam.keys() True
>>> 'color' in spam
False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目链接 难度:简单 类型: 哈希表 给定一个整数数组 nums 和一个目标值 target,...
    wzNote阅读 16,612评论 0 3
  • 需求 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回...
    惑也阅读 555评论 0 2
  • 1. 数值类型 ** int 整数 **如:1,100,-8080,0,十六进制:0xff00,0xa5b4c3d...
    泊牧阅读 278评论 0 0
  • # 前言 >秋招的结束,面试了大大小小的公司,最大的问题在于算法上。所以打算坚持在leetcode打卡,看看到底能...
    Timestamp阅读 197评论 0 0
  • 1. Two Sum 用hash可以得到O(n)时间的解法,用python中的enumerate函数,可以获得元素...
    Morphiaaa阅读 450评论 0 0