寫乙個函式,此函式要實現以下功能:
給乙個列表,並且給乙個目標數字,如果列表裡的兩個數字之和等於目標數字,返回那兩個數字的索引值。
比如,給定列表[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 雙指標遍歷陣列 ...