ETH官方钱包

切換
舊版
前往
大廳
主題

LeetCode - 1. Two Sum 解題心得

Not In My Back Yard | 2020-07-23 01:16:19 | 巴幣 0 | 人氣 513

題目連結(jié):


題目意譯:
給定一個(gè)整數(shù)陣列 nums 以及一個(gè)目標(biāo)數(shù)字 target,請(qǐng)找出兩個(gè)索引值,該索引值之對(duì)應(yīng)數(shù)字之和為 target 。保證有唯一解,且同一個(gè)數(shù)字不能使用兩次(兩個(gè)索引值必須相異)。



範(fàn)例測(cè)資:
給定 nums = [2, 7, 11, 15], target = 9,

因?yàn)?nums[0] + nums[1] = 2 + 7 = 9,
因此回傳 [0, 1] 。


解題思維:
雙層迴圈去窮舉取 nums 陣列中的兩個(gè)數(shù)字並相加,看有無符合 target 的值。藉此來找到解答是可行的,但是這個(gè)做法需要 O(N ^ 2) ,其中 N 是 nums 的元素之個(gè)數(shù)。



我們可以用雜湊表(Hash Table)來加速到 O(N logN) (C++ 使用 map 容器、Python 使用 dict 等等)。

使用單層迴圈掃過陣列。每掃到一個(gè)數(shù)字 nums[i] ,看 target - nums[i] 這個(gè)數(shù)字是否有在我們的雜湊表裡。有的話,target - nums[i] 經(jīng)由雜湊表對(duì)應(yīng)到的索引值以及此時(shí)的索引值 i 即是所求的兩個(gè)索引值;如果沒有,就將 nums[i] 加到雜湊表裡並對(duì)應(yīng)到目前的索引值 i 。

此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。



第一篇的 LeetCode 心得,也就此開啟了一個(gè)新的大坑。同樣也是盡量一天上傳一題解題心得,作為自己的每日挑戰(zhàn)/任務(wù)/消遣並試著與其他人分享和討論。

心得格式跟 ZeroJudge 系列的稍稍不同。題目大意變成題目意譯、範(fàn)例輸入和範(fàn)例輸出合併為範(fàn)例測(cè)資。前者因?yàn)樵}基本上已經(jīng)很精簡(jiǎn)了,所以單純意譯並加一些小註記;後者是因?yàn)?LeetCode 每一題通常都會(huì)解釋測(cè)資,所以同樣也意譯成中文。

創(chuàng)作回應(yīng)

更多創(chuàng)作