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...