41、和為s的兩個數字VS和為s的連續正數序列

和為s的兩個數字

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

代碼實現:

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        #題目沒有對于特殊情況的輸入做解釋,那么也就先滿足基本功能吧
        length = len(array)
        p1 = 0
        p2 = length - 1
        while p1 < p2:
            #若有答案,則返回答案
            if array[p1] + array[p2] == tsum:
                return array[p1],array[p2]
            elif array[p1] + array[p2] < tsum:
                p1 += 1
            else:
                p2 -= 1

        #若運行至此,說明沒有答案,因此返回空列表
        return []

和為s的連續正數序列

參考上面的做法,我們可以令small=1,big=2,然后sum小于target,就增大small的值,大于target就減小big的值。
那么既然有多個結果,什么時候停止呢?
注意到,是連續的正數序列,并且最小只能有兩個數。那么small就應該在(1+target)//2處停止。比如,對于15來說,當small到8時,最少也是8+9等于17了。因此,當small等于middle時,就可以終止了。

注意的地方:
不知道指針small和big指針怎么操作的話,可以舉例子,比如15,走一遍就知道了。
初始化small 為1,big為2,curSum為1+2=3

  • 當curSum比tarSum小時,應該向右移動big指針。
  • 當curSum比tarSum大時,應該向左移動small指針。
  • 當curSum等于tarSum時,此時應該輸出從small到big的序列。
    但是需要注意的是,此時我們仍然想要找別的解,那么怎么移動呢?經過寫的例子,很容易推出,此時應該向右移動big指針,去推動循環的繼續實現。

代碼實現:

# -*- coding:utf-8 -*-
class Solution:
    def outList(self,small,big):
        out = []
        for i in range(small,big+1):
            out.append(i)
        return out

    def FindContinuousSequence(self, tsum):
        if tsum < 3:
            return []

        small = 1
        big = 2
        middle = (1+tsum)//2
        curSum = small + big
        res = []

        while small < middle:
            if curSum < tsum:
                big += 1
                curSum += big

            elif curSum >  tsum:
                curSum -= small
                small += 1

            else:
                out = self.outList(small,big)
                res.append(out)
                big += 1
                curSum += big
        return res

S = Solution()
print(S.FindContinuousSequence(15))
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 題目:輸入一個遞增排序的數組和一個數字s,在數組中查找兩個數,使得他們的和正好是s。如果有多對數字的和等于s,輸出...
    qmss閱讀 222評論 0 0
  • 題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他并...
    Gxxx_xx閱讀 1,195評論 1 0
  • 1. 找出數組中重復的數字 題目:在一個長度為n的數組里的所有數字都在0到n-1的范圍內。數組中某些數字是重復的,...
    BookThief閱讀 1,815評論 0 2
  • 你的一切 那么美好 那么優秀 比太陽耀眼 比月亮溫柔 比星星閃亮 讓我覺得這世間的最好都被你占據了 自從為你淪陷了...
    紫色的雪6閱讀 190評論 0 0
  • 記憶的七秒我是孤獨的沒有誘人的水草看不見星星是否睡覺所以必須死去 媽媽不想吃奶粉,有股味...需要母乳孩子,堅持天...
    黃河流沙閱讀 500評論 10 14