題目傳送門
因為結果是連續序列,所以可用頭哨兵尾哨兵來唯一確定乙個序列。序列的和也可以計算出。因此有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 ...