這個題很經典,我只會兩種做法,然後在網上看了別的大佬的新穎解法(我想不到的0.0),也算作是個學習吧。
題目描述:
輸入乙個正數s,列印出所有和為s的連續正數序列(至少含有兩個數)。
例如輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以結果列印出3個連續序列1~5、4~6和7~8。
樣例:
輸入:15
輸出:[[1,2,3,4,5],[4,5,6],[7,8]]
class
solution
return;}
for(
int i =
1; i < target; i++)}
} vectorint>
>
findcontinuoussequence
(int sum)
};
思路:
設定兩個指標i和j,j再去遍歷陣列後面的數字,看是否能加到sum, j和 j + n分別指向連續正數序列的起始和終止
用s表示當前連續正數序列的和,即s=j+(j+1)+…+j + n <= sum ?
看是否能湊出sum的值。
時間複雜度:o(n*n)
空間複雜度:o(n)
class
solution
if(res == sum) ans.
push_back
(tmp);}
return ans;}}
;
思路:利用連續陣列求和公式,sn = (首項 + 尾項)*項數 / 2 。所以利用雙指標i,j 求的解。
class
solution
else
if( ans < sum)
else
i ++
;//否則i往後移動
}return res;}}
;
思路:
設定兩個指標i和j,分別指向連續正數序列的起始和終止
用s表示當前連續正數序列的和,即s=i+(i+1)+…+js=i+(i+1)+…+j
以i遞增的方式遍歷整個序列(1到n),代表查詢以i開頭的時候結尾j應該是多少。當ssums>sum說明向後走即可。
注意上述遍歷過程中,s=sums=sum的情況下不需要把j往前移動,原因是當進入下乙個迴圈前s−=is−=i,即(i+1)到j的和肯定小於sum。
class
solution
s -= i;
}return res;}}
;
和為S的連續正數序列
題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...