本算法是通过刷LeetCode题所学的 参考题解:什么是滑动窗口,以及如何用滑动窗口解这道题(C++/Java/Python)
1. 什么是滑动窗口
是一种基于数组的数据结构的算法、本质上是双指针。滑动窗口可以看成数组中框起来的一个部分。在一些数组类题目中,我们可以用滑动窗口来观察可能的候选结果。当滑动窗口从数组的左边滑到了右边,我们就可以从所有的候选结果中找到最优的结果。 滑动窗口的左右边界只能向右移动。
2. 滑动窗口模板
理解并记下来对刷题很有帮助。
public int[][] findContinuousSequence(int target) {
int i = 1;
int j = 1;
int sum = 0;
List<int[]> res = new ArrayList<>();
while (i <= target / 2) {
if (sum < target) {
sum += j;
j++;
} else if (sum > target) {
sum -= i;
i++;
} else {
int[] arr = new int[j-i];
for (int k = i; k < j; k++) {
arr[k-i] = k;
}
res.add(arr);
sum -= i;
i++;
}
}
return res.toArray(new int[res.size()][]);
}
|