タイトル
インタビューの質問57 - IIと連続した正シーケンスsの数。
正の整数目標は、すべての連続した正の整数の出力、および標的配列(少なくとも2つの数値を含む)を入力します。
昇順で番号が最初の数字に応じて異なる配列の昇順に配列されています。
例1:
入力:目標= 9
出力:[[2,3,4]、[4,5]
実施例2:
入力:目標= 15
出力:[1,2,3,4,5]、[4,5,6]、[7,8]
制限事項:
1 <=目標<= 10 ^ 5
問題解決のためのアイデア
被験者が必要な連続番号であるので、問題解決するためにスライディングウィンドウメカニズムを使用することが可能である
時間の複雑性をO(ターゲット)であり、空間的な複雑さはO(1)です。
コード
class Solution {
public int[][] findContinuousSequence(int target) {
//滑动窗口
List<int[]> ans=new ArrayList<>();
for(int i=1,j=i+1,sum=i+j;i<=target/2&&j<target;) {
if(sum==target) {
int[] a=new int[j-i+1];
for(int k=i;k<=j;k++)
a[k-i]=k;
ans.add(a);
i++;
j=i+1;
sum=i+j;
}
else {
if(sum<target){j++;sum=sum+j;}
else {
sum=sum-i;
i++;
}
}
}
return ans.toArray(new int[ans.size()][]);
}
}