01-兩數(shù)之和

01-兩數(shù)之和

給定一個整數(shù)數(shù)組 nums 和一個目標值 target著蛙,請你在該數(shù)組中找出和為目標值的那 兩個 整數(shù),并返回他們的數(shù)組下標题禀。

你可以假設每種輸入只會對應一個答案吞加。但是,數(shù)組中同一個元素不能使用兩遍往衷。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

回答可執(zhí)行的代碼:

def two_sum(nums, target):
    """這樣寫更直觀,遍歷列表同時查字典"""
    dct = {}
    for i, n in enumerate(nums):
        # print("i=%s,n=%s" % (i, n))
        cp = target - n
        # print("target=%s,cp=%s" % (target, cp))
        if cp in dct:
            # print(dct[cp], i)
            return [dct[cp], i]
        else:
            dct[n] = i


nums = [2,7,5,6,3]
target = 9

two_sum(nums,target)

# 我想請教一下對于最后一句為什么還要加呢严卖?
# 當然要加席舍,不給字典賦值的話 dct 永遠為空,還怎么做 in 判斷呢 ~~


官方題解:

方法一:暴力枚舉

思路及算法

最容易想到的方法是枚舉數(shù)組中的每一個數(shù) x哮笆,尋找數(shù)組中是否存在 target - x来颤。

當我們使用遍歷整個數(shù)組的方式尋找 target - x 時,需要注意到每一個位于 x 之前的元素都已經(jīng)和 x 匹配過稠肘,因此不需要再進行匹配福铅。而每一個元素不能被使用兩次,所以我們只需要在 x 后面的元素中尋找 target - x项阴。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, n):
                if nums[i] + nums[j] == target:
                    return [i, j]
        
        return []

復雜度分析

  • 時間復雜度:O(N^2)O(N2)滑黔,其中 NN 是數(shù)組中的元素數(shù)量。最壞情況下數(shù)組中任意兩個數(shù)都要被匹配一次鲁冯。
  • 空間復雜度:O(1)O(1)拷沸。

方法二:哈希表

思路及算法

注意到方法一的時間復雜度較高的原因是尋找 target - x 的時間復雜度過高。因此薯演,我們需要一種更優(yōu)秀的方法撞芍,能夠快速尋找數(shù)組中是否存在目標元素。如果存在跨扮,我們需要找出它的索引序无。

使用哈希表,可以將尋找 target - x 的時間復雜度降低到從 O(N)O(N) 降低到 O(1)O(1)衡创。

這樣我們創(chuàng)建一個哈希表帝嗡,對于每一個 x,我們首先查詢哈希表中是否存在 target - x璃氢,然后將 x 插入到哈希表中哟玷,即可保證不會讓 x 和自己匹配。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
            hashtable[nums[i]] = i
        return []

復雜度分析

時間復雜度:O(N)O(N)一也,其中 NN 是數(shù)組中的元素數(shù)量巢寡。對于每一個元素 x,我們可以 O(1)O(1) 地尋找 target - x椰苟。

空間復雜度:O(N)O(N)抑月,其中 NN 是數(shù)組中的元素數(shù)量。主要為哈希表的開銷舆蝴。

高贊回答:

def two_sum(nums, target):
    """這樣寫更直觀谦絮,遍歷列表同時查字典"""
    dct = {}
    for i, n in enumerate(nums):
        cp = target - n
        if cp in dct:
            return [dct[cp], i]
        else:
            dct[n] = i

拓展:
Python enumerate() 函數(shù)
描述

enumerate() 函數(shù)用于將一個可遍歷的數(shù)據(jù)對象
(如列表题诵、元組或字符串)組合為一個索引序列,
同時列出數(shù)據(jù)和數(shù)據(jù)下標层皱,一般用在 for 循環(huán)當中性锭。

語法
以下是 enumerate() 方法的語法:

enumerate(sequence, [start=0])

參數(shù)

  • sequence -- 一個序列、迭代器或其他支持迭代對象奶甘。
  • start -- 下標起始位置篷店。

返回值
返回 enumerate(枚舉) 對象。
實例
以下展示了使用 enumerate() 方法的實例:

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臭家,一起剝皮案震驚了整個濱河市疲陕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钉赁,老刑警劉巖蹄殃,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異你踩,居然都是意外死亡诅岩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門带膜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩谦,“玉大人,你說我怎么就攤上這事膝藕∈酵ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵芭挽,是天一觀的道長滑废。 經(jīng)常有香客問我,道長袜爪,這世上最難降的妖魔是什么蠕趁? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮辛馆,結果婚禮上俺陋,老公的妹妹穿的比我還像新娘。我一直安慰自己昙篙,他們只是感情好倔韭,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓢对,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胰苏。 梳的紋絲不亂的頭發(fā)上硕蛹,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天醇疼,我揣著相機與錄音,去河邊找鬼法焰。 笑死秧荆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的埃仪。 我是一名探鬼主播乙濒,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卵蛉!你這毒婦竟也來了颁股?” 一聲冷哼從身側(cè)響起囱皿,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醋火,失蹤者是張志新(化名)和其女友劉穎映穗,沒想到半個月后萝招,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體添诉,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡样傍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年捂贿,在試婚紗的時候發(fā)現(xiàn)自己被綠了渤弛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泛释。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡滤愕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怜校,到底是詐尸還是另有隱情间影,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布韭畸,位于F島的核電站宇智,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胰丁。R本人自食惡果不足惜随橘,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锦庸。 院中可真熱鬧机蔗,春花似錦、人聲如沸甘萧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扬卷。三九已至牙言,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怪得,已是汗流浹背咱枉。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工卑硫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚕断。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓欢伏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亿乳。 傳聞我的和親對象是個殘疾皇子硝拧,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 題目 給定一個整數(shù)數(shù)組 nums和一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 的那兩個整數(shù)葛假,并返...
    陶特斯閱讀 159評論 0 0
  • 兩數(shù)之和(two-sum) 這是LeetCode上一道十分經(jīng)典的題目障陶,存在多種解法,難度是簡單桐款,但后面難度更高的三...
    ZenMoto閱讀 518評論 0 0
  • 標簽:數(shù)組咸这、哈希表 題目在:two-sum 給定一個整數(shù)數(shù)組 nums 和一個目標值 target,請你在該數(shù)組中...
    bluescorpio閱讀 151評論 0 1
  • 一魔眨、問題 給定一個整數(shù)數(shù)組 nums 和一個目標值 target媳维,在該數(shù)組中找出和為目標值的那兩個整數(shù),并返回對應...
    Djbfifjd閱讀 239評論 0 1
  • 題目: 題目地址:https://leetcode-cn.com/problems/two-sum/ 問題描述: ...
    MrGeekr極氪閱讀 613評論 0 0