問題描述:
給定乙個陣列:a1,a2,…,an,和乙個目標數值target,問陣列中是否存在兩個數ai和aj,使得ai+aj等於target。
解題思路:
先將陣列排序,時間複雜度為o(nlogn),然後分別用兩個指標 i , j 指向排序後陣列的頭和尾,計算ai+aj,之和s,若s大於target,則說明j取值過大,所以j=j-1;若s小於target,則說明i取值過小,所以i=i+1。若s等於target,則說明ai,aj是一組解,若只需求解是否存在,或一組解,這時可以返回,否則可同時使i=i+1,j=j-1,直到i>=j才跳出迴圈。時間複雜度為o(n)。總的時間複雜度為o(nlogn)
**:
def
two_sum
(a,target):
head=0
tail=len(a)-1
a.sort()
solution=
while headif a[head]+a[tail]>target:
tail-=1
elif a[head]+a[tail]1
elif a[head]+a[tail]==target:
head+=1
tail-=1
return solution
下面介紹一種時間複雜度為o(n)的方法:
首先,我們建立乙個雜湊表,這裡選用python的字典,其鍵是給定陣列中第i個數與target的差值(i=0,1,2,3,…,n-1),鍵值為i,即第i個數的下標。依次遍歷陣列,直到陣列中的某乙個數在字典的鍵中出現,返回該鍵值和當前下標,否則返回-1,表示沒有解。下面為**:
def
two_sum
(a,target):
d={}
for index,num in enumerate(a):
if num in d:
return [d[num],index]
else:
d[target-num]=index
return -1
由2個數之和擴充套件的問題有 3數之和 以及 3數之和最接近target的值
3數之和解法是先遍歷陣列的每乙個數ai,用target值減去ai,得到新的t=target-ai,再求陣列ai+1,ai+2,…,an與t的兩數之和的解
兩數之和(每日一題)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
第一題 兩數之和
題目 力扣 題目 給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。示例 1 輸入 nums 2,7,11,15 target 9 輸出 0,1 解釋 因為 nums 0 nums 1 9 返回 0,1 示例 2 輸入...
Leetcode 第一題 兩數之和
給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...