劍指Offer(Python多種思路實現):和爲s的數字
面試57題:
題目:和爲s的數字
題目描述
輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
解題思路一:使用while循環從兩端向中間掃描數組,時間複雜度爲O(n)
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if len(array)<2:
return []
found=False
fst,lst=0,len(array)-1
while fst<lst:
sum_total=array[fst]+array[lst]
if sum_total==tsum:
found=True
return [array[fst],array[lst]]
elif sum_total<tsum:
fst +=1
else:
lst -=1
return []
解題思路二:
def FindNumbersWithSum(self, array, tsum):
l, r = 0, len(array)-1
while l < r:
if array[l] + array[r] < tsum:
l += 1
elif array[l]+array[r] > tsum:
r -= 1
else:
return array[l], array[r]
return []