思路:注意題目上說是連續的一串數。判斷連續的一串數是否滿足一定的性質可以轉化爲在一個區間內這些數是否滿足一定的性質,那麼這道題就可以用我們喜聞樂見的滑動區間來做了。
模擬過程:我們可以設一個初始區間,左邊界l=1,右邊界r=2.
在這個區間內,數字之和就是等差數列求和:sum=(l+r)*(r-l+1)/2
如果sum<target 那麼說明這個區間太小了,就讓右邊界向右移動擴大區間
如果sum>target,那麼說明這個區間太大了,就讓左邊界向右移動縮小區間
如果sum==target,那麼說明這個區間正好滿足性質,就賦值給目標數組。然後以這個左邊界開頭的區間已經找過了,所以就讓左邊界向右移動找下一個解。
代碼如下:
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>>ver;
vector<int>ans;
int sum,l=1,r=2;
for(int l=1,r=2;l<r;)
{
sum=(l+r)*(r-l+1)/2;
if(sum==target)
{
ans.clear();
for(int i=l;i<=r;i++) ans.push_back(i);
ver.push_back(ans);
l++;
}
else if(sum>target) l++;
else r++;
}
return ver;
}
};