python 兩數之和的相關題目

2021-09-22 02:28:54 字數 2230 閱讀 7535

1.給定乙個列表和乙個整數,設計演算法找到兩個數的下標,使得兩個數之和為給定的整數。保證肯定僅有乙個結果。

n例:列表[1,2,5,4]與目標整數3,1+2=3,結果為(0, 1).

li = [1,3,6,9,13,18,21,26,33]

target = 31

# 方法一

def two_sum_1(li, target):

for i in range(len(li)):

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

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

return i, j

return -1,-1

# 方法二

def two_sum_2(li, target):

def binary_search(li, val, low, high):

while low <= high: # 只要候選區有值

mid = (low + high) // 2

if val == li[mid]:

return mid

elif val < li[mid]:

high = mid - 1

else: # val > li[mid]

low = mid + 1

return -1

for i in range(len(li)):

a = li[i]

b = target - a

j = binary_search(li, b, i+1, len(li)-1)

if j >= 0:

return i, j

return -1,-1

2.題1中的列表改為有序列表-

def two_sum_3(li, target):

i = 0

j = len(li)-1

while i < j:

x = li[i] + li[j]

if x < target:

i += 1

elif x > target:

j -= 1

else:

return i, j

return -1,-1

第二種:

# o(n) 需要空間複雜度

def two_sum_4(li, target):

dic = {}

for i in range(len(li)):

a = li[i]

b = target - a

if b in dic:

return dic[b], i

else:

dic[a] = i

3.找出有序陣列中加和等於sum的所有元素對,每個元素(下標來唯一標識)只能用一次。

eg1:

a = [1, 1, 3, 4, 5, 7, 9, 11]

result=[(1, 7), (3, 5)]

eg2:

b = [1, 1, 3, 4, 5, 7, 7, 9, 11]

result=[(1, 7), (1, 7), (3, 5)]

def two_sum(li, target):

index_list =

result =

for i in range(len(li)):

j = len(li) - 1

while i < j:

x = li[i] + li[j]

if x < target:

i += 1

elif x > target:

j -= 1

else:

if i not in index_list and j not in index_list:

elif i in index_list :

i += 1

else:

j -= 1

for i in range(len(index_list)):

if i % 2==0:

return result

a = [1, 1, 3, 4, 5, 7, 9, 11]

b = [1, 1, 3, 4, 5, 7, 7, 9, 11]

print(two_sum(a, 8))

print(two_sum(b, 8))

題目 兩數之和

題目 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leco題目 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...

leetcode題目 1 兩數之和

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...