用java 手写一个滑动窗口算法
时间: 2023-09-26 17:11:07 浏览: 109
滑动窗口算法是一种常用的解决字符串/数组子串或者子序列问题的算法。下面是一个 Java 手写滑动窗口算法的示例代码:
```java
public class SlidingWindow {
public static int findMaxSum(int[] arr, int k) {
int n = arr.length;
if (n < k) {
System.out.println("Invalid input");
return -1;
}
int maxSum = 0, windowSum = 0;
for (int i = 0; i < k; i++) {
windowSum += arr[i];
}
maxSum = windowSum;
for (int i = k; i < n; i++) {
windowSum += arr[i] - arr[i - k];
maxSum = Math.max(maxSum, windowSum);
}
return maxSum;
}
public static void main(String[] args) {
int[] arr = { 1, 4, 2, 10, 23, 3, 1, 0, 20 };
int k = 4;
int maxSum = findMaxSum(arr, k);
System.out.println("Maximum sum of subarray of size " + k + " is " + maxSum);
}
}
```
在这个示例代码中,我们实现了一个 findMaxSum 方法用于计算一个长度为 k 的滑动窗口在给定数组中的最大子数组和。我们首先计算出前 k 个元素的和作为窗口的初始值,然后从第 k 个元素开始,每次将当前元素加入窗口并将窗口的开头元素移除,同时更新最大子数组和的值。
该示例代码的输出结果为:
```
Maximum sum of subarray of size 4 is 39
```
即数组 {10, 23, 3, 1} 的和为 39,为长度为 4 的滑动窗口在原数组中的最大子数组和。
阅读全文