劍指offer:和爲S的兩個數字(Python)

題目描述

輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。

輸出描述:

對應每個測試案例,輸出兩個數,小的先輸出。

解題思路

數列滿足遞增,設兩個頭尾兩個指針ij
ai + aj == sum,就是答案(相差越遠乘積越小)
ai + aj > sumaj肯定不是答案之一(前面已得出 i前面的數已是不可能),j -= 1
ai + aj < sumai肯定不是答案之一(前面已得出j 後面的數已是不可能),i += 1

代碼如下:

def FindNumbersWithSum(self, array, tsum):
    left, right = 0, len(array)-1
    while left < right:
        if array[left] + array[right] > tsum:
            right -= 1
        elif array[left] + array[right] < tsum:
            left += 1
        else:
            return [array[left], array[right]]
    return []
發佈了85 篇原創文章 · 獲贊 103 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章