牛客網 和為S的兩個數字
阿新 • • 發佈:2019-01-07
題目:
輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出:
對應每個測試案例,輸出兩個數,小的先輸出。
解法:
自己的想法是一個標記指向最小值,然後判斷sum-array[low]是否在陣列中,如果在計算積並存儲,最終輸出積最小的結果。
class Solution: def FindNumbersWithSum(self, array, tsum): # write code here low=0 mid=len(array)//2 min_mul=float('Inf') ans=[] while low<mid: if tsum-array[low] in array: if array[low]*(tsum-array[low])<min_mul: min_mul=array[low]*(tsum-array[low]) ans=[array[low],tsum-array[low]] low+=1 return ans
但是提交時顯示:執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。
參考別人解法:和為S的兩個數字,之後,修改上述方法:
class Solution: def FindNumbersWithSum(self, array, tsum): # write code here low=0 mid=len(array)//2 min_mul=float('Inf') ans=[] for low in range(mid): for v1 in array[low:]: if array[low]+v1==tsum: ans.append([array[low],v1]) if ans: return ans[0] else: return ans