《再來一題》陣列中是否存在兩數之和等於target

2021-08-14 06:01:14 字數 1158 閱讀 3298

問題描述:

給定乙個陣列: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 所...