1. 程式人生 > >牛客網 和為S的兩個數字

牛客網 和為S的兩個數字

題目:

輸入一個遞增排序的陣列和一個數字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