LeetCode (01) Two Sums by Python

該博客記錄自己刷LeetCode的過程遥倦,每道題AC后總結(jié)寫博客,希望對自己又幫助碉考。

目前刷題使用語言為Python塌计。LeetCode鏈接。

問題描述如下侯谁。

image

首先我們分析題目锌仅。

題目的意思是給任意一個數(shù)組,在給一個目標(biāo)數(shù)墙贱。在數(shù)組中找到兩個數(shù)相加等于這個目標(biāo)數(shù)热芹,然后返回這兩個數(shù)的下標(biāo)。題目假設(shè)數(shù)組中只有唯一的兩個數(shù)相加等于目標(biāo)數(shù)惨撇,既返回的下標(biāo)只有一組伊脓。

這道題屬于很簡單的題目,代碼如下:

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        for i in range(len(nums)):

            others = target - nums[i]

            if others in nums:

                index1 = i

                index2 = nums.index(others)

                if index1 == index2:

                    continue

                else:

                    break

        return index1,index2

根據(jù)代碼可以很明確的看到思路魁衙。我們遍歷整個List报腔。用 target 減去第 i 個數(shù),得到others剖淀。然后在數(shù)組中找是否存在與others相等的數(shù)纯蛾。如果存在,則返回 i 和 others的下標(biāo)纵隔,如果不存在翻诉,則i + 1。


思路很簡單捌刮,但是要避免一個小坑碰煌。
如果List是[3 , 3], target = 6。按照上述思路糊啡,nums[0] = 3 , others = 3, 然后在數(shù)組中找到與others相等的數(shù)后即退出循環(huán)拄查,返回下標(biāo)吁津。我們返回的下標(biāo)是[0, 0] 而實際正確的答案應(yīng)該是[0, 1]棚蓄。
出現(xiàn)這個原因是因為堕扶,我們在數(shù)組中找是否存在與others相等的數(shù)時,也包括了nums[i]梭依,如果others 和 nums[i] 相等的情況稍算,則會返回相同的下標(biāo)。


解決這個小坑的方法有很多役拴。
我的思路是返回的判斷返回的下標(biāo),如果index1 = index2糊探,那么這次循環(huán)不算,continue河闰。然后進入下一次循環(huán)科平。
這樣[3 , 3], target = 6 返回的下標(biāo)是返回的下標(biāo)是[1, 0]。
這個地方我感覺有點問題姜性,應(yīng)該是[0, 1]因為continue后i + 1了瞪慧,所以會出這個問題。但是同樣AC了部念。
解決這個小問題的思路很簡單弃酌,這種情況只出現(xiàn)在others == nums[i]的情況,當(dāng)我們判斷這種情況出現(xiàn)時儡炼,我們把nums[i]的值置為無窮小妓湘,這樣不會影響結(jié)果。
修改后的代碼如下:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            others = target - nums[i]
            if others == nums[i]:
                nums[i] = -9999999
            if others in nums:
                index1 = i
                index2 = nums.index(others)
                if index1 == index2:
                    continue
                else:
                    break
        return index1,index2
image.png

很簡單的AC了乌询,用時有點暴力榜贴。
以上就是本題的解題代碼和思路。很簡單的題目妹田,如果對這種方法不滿意竣灌,也歡迎和我討論新的方法。


補充:
去做LeetCode的題目是為了提高自己的算法水平和代碼能力秆麸,基礎(chǔ)薄弱初嘹。有的題目雖然自己的方法可以AC,但是有更好的方法可以學(xué)習(xí)沮趣。個人認為刷題不僅是為了AC屯烦,更多的是學(xué)習(xí)新的方法和技巧。
關(guān)于本題參考了其他博客房铭,用Python Dict的方法用時更短也更巧妙驻龟。參考博客鏈接:http://www.cnblogs.com/zuoyuan/p/3698966.html

附上新的方法的代碼:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dictTmp = {}
        for i in range(len(nums)):
            x = nums[i]
            if target - x in dictTmp:
                return (dictTmp[target-x], i)
            dictTmp[x] = i 

新的方法采用的是Python字典的方法。
我們首先把nums[i]的值對應(yīng)的下標(biāo)放在字典里缸匪。在遍歷整個nums[i]時翁狐,判斷target -
nums[i]是否在字典中,如果在字典中凌蔬,則返回字典的下標(biāo)露懒,以及此時的i闯冷。
這種方法很巧妙,需要注意判斷的位置懈词。
由于表述問題可能不是很清楚蛇耀,建議有疑惑的同學(xué)自己用筆親自畫一畫或者Debug單步調(diào)試。
以上坎弯,祝好纺涤!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抠忘,隨后出現(xiàn)的幾起案子撩炊,更是在濱河造成了極大的恐慌,老刑警劉巖崎脉,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衰抑,死亡現(xiàn)場離奇詭異,居然都是意外死亡荧嵌,警方通過查閱死者的電腦和手機呛踊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啦撮,“玉大人谭网,你說我怎么就攤上這事≡叽海” “怎么了愉择?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長织中。 經(jīng)常有香客問我锥涕,道長,這世上最難降的妖魔是什么狭吼? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任层坠,我火速辦了婚禮,結(jié)果婚禮上刁笙,老公的妹妹穿的比我還像新娘破花。我一直安慰自己,他們只是感情好疲吸,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布座每。 她就那樣靜靜地躺著,像睡著了一般摘悴。 火紅的嫁衣襯著肌膚如雪峭梳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天蹂喻,我揣著相機與錄音葱椭,去河邊找鬼捂寿。 笑死,一個胖子當(dāng)著我的面吹牛挫以,可吹牛的內(nèi)容都是我干的者蠕。 我是一名探鬼主播窃祝,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼掐松,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粪小?” 一聲冷哼從身側(cè)響起大磺,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎探膊,沒想到半個月后杠愧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡逞壁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年流济,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腌闯。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡绳瘟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姿骏,到底是詐尸還是另有隱情糖声,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布分瘦,位于F島的核電站蘸泻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘲玫。R本人自食惡果不足惜悦施,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望去团。 院中可真熱鬧歼争,春花似錦、人聲如沸渗勘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旺坠。三九已至乔遮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間取刃,已是汗流浹背蹋肮。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工出刷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坯辩。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓馁龟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漆魔。 傳聞我的和親對象是個殘疾皇子坷檩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 這個孩子的到來,讓我經(jīng)歷了人生的各種滋味改抡。2007年9月份懷上他矢炼,懷孕一個多月的我回家為爺爺慶生,我想這個...
    龔嘉淇閱讀 357評論 0 2
  • 想和你討論阿纤,有關(guān)無法安心接受別人的表揚的問題句灌。這個情況我也有。摘錄之前的兩段欠拾。 【X:目前不知道該怎么解決】 Y:...
    京津記閱讀 373評論 0 0
  • 沒有您 就沒有我 沒有天空的湛藍 沒有湖泊的澄澈 沒有您 就沒有我 沒有人世的因緣 沒有紅塵的快樂 您是慈悲的菩薩...
    飛鏑閱讀 295評論 0 1
  • 日出時間是5:51藐窄,早早的起來開車趕到楠溪江江邊资昧。 天已經(jīng)蒙蒙亮了。 日出東方枷邪,可是那邊隔了座山榛搔。 早有準(zhǔn)備,飛...
    阿凡達指南者閱讀 571評論 0 0
  • JDK基礎(chǔ) JDK,JRE,JVM的作用及關(guān)系(掌握) 作用JVM:保證Java語言跨平臺JRE:Java程序的運...
    清楓_小天閱讀 1,089評論 2 31