LeetCode_Python(1)_兩數(shù)之和

需求

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

你可以假設(shè)每種輸入只會(huì)對應(yīng)一個(gè)答案。但是,你不能重復(fù)利用這個(gè)數(shù)組中同樣的元素。

示例:
給定 nums = [4, 11, 4, 15, 4],target = 8
因?yàn)?nums[0] + nums[2] = 4 + 4 = 8 ,所以返回 [0, 2]

解決方案


方法一

  1. 不重復(fù)利用同樣的元素,即不能自己加自己,同一個(gè)元素也不能使用超過1次;
  2. 每次輸出只對應(yīng)一個(gè)答案,即只有一對數(shù)據(jù)符合要求。
  3. 使用Python內(nèi)置函數(shù)enumerate()獲取數(shù)組元素(value)及對應(yīng)的索引(key);
  4. 如果target - value 在列表中,且其索引必須大于key,同時(shí)key不在target_list中,則將key和值target - value在列表nums中的索引位置,添加到target_list中即可。
  5. 參考代碼
def two_sum(nums, target):
    target_list = []
    for key, value in enumerate(nums):
        if (target - value) in nums[key+1:] and key not in target_list:
            target_list.extend([key, key + 1 + nums[key+1:].index(target - value)])
    return target_list

nums = [4, 11, 4, 15, 4]
target = 8
result = two_sum(nums, target)
print(result)
[0, 2]

方法二

  1. 方法二僅對數(shù)列遍歷一次,通過索引位數(shù)加一排除使用重復(fù)元素;
  2. 對數(shù)列遍歷后,將索引和值添加到字典中,同時(shí)對字典進(jìn)行遍歷,判斷target-num是否在字典中,如果在則可以同時(shí)2個(gè)元素的索引位置。
  3. 參考代碼
def two_sum(num, target):
    d = {}
    for index, dig in enumerate(nums):
        item = target - dig
        for key, value in d.items():
            if value == item:
                return (key, index)
        d[index] = dig

nums = [4, 11, 4, 15, 4]
target = 8
result = two_sum(nums, target)
print(result)
(0, 2)


需求延伸

如果不要求每種輸入只會(huì)對應(yīng)一個(gè)答案,則結(jié)果可能有多對數(shù)據(jù),對方法(一)中的target_list,通過列表推導(dǎo)式的方法,成對地輸出,參考代碼:

def get_target_index(nums, target):
    target_list = []
    for key, value in enumerate(nums):
        if (target - value) in nums[key+1:] and key not in target_list:
            target_list.extend([key, key + 1 + nums[key+1:].index(target - value)])

    result = [target_list[x:x+2] for x in range(0, len(target_list), 2)]
    return result

nums = [2, 6, 4, 11, 4, 15, 4]
target = 8
result = get_target_index(nums, target)
print(result)
[[0, 1], [2, 4]]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 時(shí)間管理就是生命管理! 改變--從我開始!早安!~優(yōu)秀是一種習(xí)慣 20180720 40/90 李為民@成都 個(gè)人...
    為民beyond閱讀 180評論 0 0
  • 自從接觸了markdown語法愛不釋手,簡單美觀,又能專注于寫作。但是平時(shí)寫筆記的印象筆記并不支持markdown...
    三水nami閱讀 4,089評論 6 2
  • 杏雨沾紅袖,東風(fēng)壓棣棠, 徑苔深處有余香。 久坐頻聽,燕字繞回廊。 客思無端起,幽懷且共量, 一般心事累愁腸。 滴...
    畫骨透情閱讀 389評論 0 10
  • 1.人物:美女,屌絲 在酒吧,一美女朝屌絲這邊走來。 美女說:問這里有人坐嗎? 屌絲禮貌地回答:沒有。 他腦袋不斷...
    寫完就睡覺閱讀 171評論 0 0