LeetCode第一题题解:两数之和

LeetCode第一题:两数之和


Ps:本系列文章只为记录自己刷LeetCode过程中的解题过程和思路。


题目来源,LeetCode

题目描述: 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例: 给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]


解题过程和思路: 当我浏览了一便这个题目的时候,心里想,哇,通俗易懂,这不是超简单的嘛。emmm,题目意思是懂了,那么怎么用计算机解呢?首先映入我脑海中的是:emm,最基础的解法吧——暴力, 把数组所有可能的两数之和都求出来不就好了,但是这样子的做法时间复杂度是O(n^2), emmm,实在不可取。接着,我又想呀想呀,怎么降低时间复杂度呢? 排序怎么样?排序了之后从小到大遍历数组,算出每个数与后续数的和,由于排序过了,计算出来的求和结果将会是一个递增的序列,当求和结果大于目标值 target 之后便停止计算,接着遍历数组中第二个数。咦,好像可行,可以避免一些无用的求和计算。由于用了排序,因此时间复杂度在O(nlogn)O(n^2)之间。博主太笨了,之后再想了许久也没想到更优的解法,因此参考了LeetCode上的大佬们的题解,哇,第一次感到世界如此奇妙。可以通过建立哈希表,也就是字典的方式来加快查询速度(空间换时间),具体怎么做呢?。将数组的值作为key,索引作为value建立字典,这样子如果我们对于数组中某个数num,要查找是否存在另外一个数another_num,使得两数之和为target,那怎么查找 another_num 这个数比较快呢? 通过我们前面建立的字典,可以通过判断字典的keys里是否有another来查找,因此查找一般只需要O(1)时间(当没出现冲突的时候)。


解题收获: 字典的妙用——以空间换时间的方式加快查找效率,记好啦。


代码展示

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        nums_d = {}
        for index,num in enumerate(nums): # 遍历nums数组枚举两个数中的第一个数
            another_num = target-num # 目标-第一个数求第二个数
            if another_num in nums_d: # 遍历nums_d字典判断两个数中的第二个数是否存在
                return min(index, nums_d[another_num]), max(index, nums_d[another_num]) # 若存在则返回
            else:
                nums_d[num] = index # 以num为两个数中的第一个数找不到答案,就将其放入存放第二个数的字典


结果展示

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354