Python求解兩數之和

2021-09-24 21:18:47 字數 1672 閱讀 3479

寫乙個函式,此函式要實現以下功能:

給乙個列表,並且給乙個目標數字,如果列表裡的兩個數字之和等於目標數字,返回那兩個數字的索引值。

比如,給定列表[3,5,7,14],目標數字是10,那麼返回[0,2],0是3的索引,2是7的索引,3+7=10.

注意,不可以重複利用列表中的某個數字,比如返回[1,1]是不能接受的。

思路:先拿出列表裡的第0個數字,依次嘗試和第1個、第2個……第n個相加,看能否等於目標數字,如果有某個組合等於目標數字,就返回這個組合的兩個索引值,如果都不行,再拿出第1個數字,依次嘗試和第2個、第3個……第n個相加,看能否等於目標數字……每個數字都不需要回過頭和前面的數字相加,因為之前已經嘗試過了。

這種方法的思路非常簡單,但是演算法的時間複雜讀比較高,為o(n2),當給定的列表很長的時候,耗時非常長。

#nums引數需要乙個列表,target引數就是我們想實現的和的值

def twoindices(nums,target):

'''這是尋找和為目標值的兩個數的索引的函式'''

for i in range(len(nums)):

#我們不需要回過頭相加,所以j是從i的下乙個數字開始,到列表的末尾

for j in range(i+1,len(nums)):

if nums[i]+nums[j]==target:

return [i,j]

else:

return "no such two numbers."

#這是我們用來檢測上述函式是否好用的乙個例子

print(twoindices([3,6,3,5],6))

思路:

先建立乙個用於存放數字和索引的空字典。

我們從列表中取出乙個數字,然後看字典裡是否存在能跟這個數字相加得到目標數字的數字。如果存在,就返回兩個數字的索引,不存在,就把取出來的這個數字作為鍵,它的索引作為值存進字典,並取出下乙個數字,重複剛才的操作,直到找到合適的兩個數字或者全部數字都看過一遍為止。

這樣演算法的時間複雜度是o(n),比第一種方法好多了。

#nums引數需要乙個列表,target引數就是我們想實現的和的值

def twoindices(nums,target):

'''這是尋找和為目標值的兩個數的索引的函式'''

#定義乙個用於存放數字和索引的字典

mydict={}

#遍歷列表裡的數字,得到索引和數字

for index,right_num in enumerate(nums):

#用目標數字減去我們當前從列表中取出的數字,得到我們需要的數字

left_num=target-right_num

#如果字典裡已經存放了我們需要的數字

if mydict.get(left_num) != none:

#返回我們需要的數字的索引和當前數字的索引,終止迴圈

return [mydict[left_num],index]

#如果字典裡還不存在我們需要的數字,則把當前的數字和它的索引存入字典

mydict[right_num]=index

else:

return 'no such two numbers.'

#用這個列表測試我們的函式好不好用

print(twoindices([3,5,3,8],6))

python 兩數之和

給定乙個整數陣列 nums和乙個整數目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。def twosum nums,tatget hashmap for ind,num in enumera...

leetcode兩數之和python

在編寫leecode上的演算法第一題 兩數之和 時,遇到了一些問題,如下 1.引數丟失 solution.twosum 2,3,4,5 8 typeerror twosum missing 1 required positional argument target 原因 沒有建立物件 解決 a so...

1 兩數之和 python

一.題目 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 二.思路 1 自己思路 1 雙指標遍歷陣列 ...