python - 清晰图解 - 字典模拟 哈希表 - 两数之和 - 只需遍历一次 数组

两数之和

http://www.nowcoder.com/questionTerminal/20ef0972485e41019e39543e8e895b7f

谁说一定要全部建立好hashMap以后才能开始查找呢?
大家可以观察一下,以下的代码~

上代码

(python3)

class Solution:
    def twoSum(self, numbers, target):
        # write code here
        if len(numbers) > 1:
            return self.getHash_traverseOnce(numbers, target)
        else:
            return []

    def getHash_traverseOnce(self, numbers, target):
        hashMap = {}

        for _ in range(len(numbers)):
            remainder = target - numbers[_]
            if remainder in hashMap:
                '''+1 是因为返回的index 要求从1开始'''
                return [hashMap[remainder]+1, _+1]
            else:
                hashMap[numbers[_]] =  _ 
        return []

思路简介

1. 只需遍历一次原数组
2. 没必要等到 建立完整的hashMap再查找,我们可以边查边找,找到了就不继续建立咯!

思路2最大的特性就是:

  1. 我们每次 插入一个新的数 进入hashMap, 我们在插入之前,就看看他的补数remainder是不是已经在数组里了?
  2. 如果在的话,直接返回结果。
  3. 如果不在的话,就正常插入,毕竟,咱们不能排除这个数可能是,后来还没插入数的补数的可能性。

思路图解

图解, target=40 为例!

初始化:
在这里插入图片描述

  1. 准备插入 key= 20 & index=0, remainder = 40 - 20 = 20,而 20此时并不在hash map里,正常插入 key=20, index = 0

在这里插入图片描述
2. 准备插入 key= 30 & index=1, remainder = 40 - 30 =10, 10 并不在hash map里,正常插入 key=10, index =1

在这里插入图片描述
3. 准备插入 key= 20 & index=2, remainder = 40 - 20 =20, 而 20此时已经有一个存在在hash map里,说明找到了 remainder = 20, index=0!

那现在就停止插入key= 20 & index=2,因为已经找到啦他的补数 remainder = 20, index=0 啦~可以返回啦

在这里插入图片描述

return [ remainder的index=0+1, 当前数的index=2+1]
(+1 是因为要求返回的index 从1开始)


题外话,大家可以去我的博客看看我的小笨方法 我的笨博客 ,一起探讨~

全部评论
对Python感兴趣的可以加交流群:821189983,回复Y加群,群内每天会更新Python资料,还有大神专业指导
点赞 回复 分享
发布于 2021-01-29 09:42
确实啊~我咋没想到。。。。哈哈哈赞 多交流
点赞 回复 分享
发布于 2021-01-27 16:27

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
12
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务