滑動視窗
阿新 • • 發佈:2020-07-15
滑動視窗演算法本質就像捲尺拉伸縮短測量,當不滿足條件是向右拉伸,當滿足條件時像左拉伸
滑動視窗框架
//左邊界
int i=1;
//右邊界
int j=1;
while(i<target){
if(條件1){
//右邊界向右
sum+=j;
j++;
}else if(條件二){
//左邊界向左
sum-=i;
i++;
}else{
//滿足條件記錄結果
//左邊界向右移動
sum-=i;
i++;
}
}
劍指 Offer 57 - II. 和為s的連續正數序列 https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/
public int[][] findContinuousSequence(int target) { //左邊界 int i=1; //右邊界 int j=1; int sum = 0; List<int[]> list = new ArrayList<>(); while(i<target){ if(sum<target){ //右邊界向右 sum+=j; j++; }else if(sum>target){ //左邊界向左 sum-=i; i++; }else{ //滿足條件記錄結果 //System.out.println(i+","+j); int[] tmp =new int[j-i]; for(int k=i;k<j;k++){ tmp[k-i] =k; } list.add(tmp); //左邊界向右移動 sum-=i; i++; } } return list.toArray(new int[list.size()][]); }