1、劍指offer.和為s的兩個數:輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。
#時間複雜度o(n)
class solution:
def findnumberswithsum(self, array, tsum):
left = 0
right = len(array) - 1
res =
ret =
while left < right:
if array[left] + array[right] == tsum:
left += 1
right -= 1
elif array[left] + array[right] < tsum:
left += 1
else:
right -= 1
if res == :
return
else:
for i in res:
pos = ret.index(min(ret))
return res[pos]
leetcode1.two sum
class solution:
def twosum(self, nums, target):
dict ={}
for i in range(len(nums)):
if nums[i] in dict:
return [dict[nums[i]],i]
else:
dict[target-nums[i]] = i
上兩個題總結:找和為定值的兩個數,若無序則用字典時間複雜度o(n)空間複雜度o(n),有序用前後指標o(n)空間複雜度o(1) 尋找和為定值的兩個數
尋找和為定值的兩個數 給定乙個陣列 無序或者有序,兩種情況都要考慮 找出和為m的兩個數。最多時間複雜度能有多少?陣列有序的情況,在時間複雜度上我們就省去了排序的o nlogn 我們使用兩端指標掃瞄法是比較簡單的,時間複雜度為o n 空間複雜度為o 1 如下圖所示 然後,判斷它們指向的值之和sum是否...
尋找和為定值的兩個數
描述 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。分析 如果採取窮舉,複雜度為o n 2 可以換乙個思...
尋找和為定值的兩個數
題目 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。解析 如果陣列是無序的,先排序 n logn 然後用...