leetcode刷題 和為s的連續正數序列

2021-10-04 19:37:00 字數 956 閱讀 3615

題目傳送門

因為結果是連續序列,所以可用頭哨兵尾哨兵來唯一確定乙個序列。序列的和也可以計算出。因此有n*n個序列需要去判斷。

但是當知道了某序列的值已經比target要大,則相同起點更長的序列不需要判斷,所以可以剪枝掉一部分,因此有滑動視窗一說。

具體流程:

序列初始為[1]其值為1(如果是0會錯)。

小於target時頭走一步(可根據增量來計算出新序列的值)

大於target時尾走一步

相等時記錄(兩者任意走一步即可)

class solution 

else

if(sum < target)

else

if(sum > target)

}return result;}}

;

因為所求為連續序列,可以設序列中位數為x,數量為n,則target=n*x

奇數序列時,中位數就是序列中間的數

偶數序列時,中位數就是序列中間兩個數的平均值,可以認定是兩者中較小的數字+0.5

(tips:當target翻倍時,中位數是整數)

所以在某個確定的長度n下,可以通過計算算出是否有序列存在。

而n的邊界的話,因為初始化序列為[1],則n應該從1開始增加,最大值為可能出現的最長的序列。

最長的序列應該是從1開始到x,其值為(x+1)*x/2

class solution 

else

if(tmp_vec[0]

!=0) result.

push_back

(tmp_vec);}

}reverse

(result.

begin()

, result.

end())

;return result;}}

;

6 連續序列和為s

題目 輸入乙個整數s,列印出全部和為s的連續整數序列 至少含有2個數 比如輸入9,則輸出2 3 4和4 5兩個序列 方案一 因為序列至少要2個數,則兩個數上限值為 1 s 2,我們能夠列舉該序列的起點和終點求全部滿足的序列。時間複雜度為o n 2 效率比較低 方案二 我們設定兩個指標start和en...

劍指Offer刷題筆記 和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...

leetcode刷題(65) 494 目標和

給定乙個非負整數陣列,a1,a2,an,和乙個目標數,s。現在你有兩個符號 和 對於陣列中的任意乙個整數,你都可以從 或 中選擇乙個符號新增在前面。返回可以使最終陣列和為目標數 s 的所有新增符號的方法數。示例 1 輸入 nums 1,1,1,1,1 s 3 輸出 5 解釋 1 1 1 1 1 3 ...