滑动窗口算法java示例
时间: 2023-08-15 19:04:48 浏览: 165
滑动窗口算法
5星 · 资源好评率100%
### 回答1:
滑动窗口算法是一种计算机算法,它可以用来搜索字符串中的子串。下面是一个Java的示例代码,用于实现滑动窗口算法:
public int search(String text, String pattern) {
int n = text.length();
int m = pattern.length();
for (int i = 0; i <= n-m; i++) {
int j;
for (j = 0; j < m; j++) {
if (text.charAt(i+j) != pattern.charAt(j)) {
break;
}
}
if (j == m) {
return i;
}
}
return -1;
}
### 回答2:
滑动窗口算法是一种常用的算法技巧,用于解决字符串或数组的子序列问题。
下面是一个用Java实现的滑动窗口算法的示例:
```java
public class SlidingWindow {
public static int findMaxSum(int[] nums, int k) {
int maxSum = Integer.MIN_VALUE;
int windowSum = 0;
// 计算初始窗口的和
for (int i = 0; i < k; i++) {
windowSum += nums[i];
}
// 滑动窗口
for (int i = k; i < nums.length; i++) {
windowSum += nums[i] - nums[i - k];
maxSum = Math.max(maxSum, windowSum);
}
return maxSum;
}
public static void main(String[] args) {
int[] nums = {1, 3, -1, -3, 5, 3, 6, 7};
int k = 3;
int maxSum = findMaxSum(nums, k);
System.out.println("滑动窗口中最大的和为:" + maxSum);
}
}
```
在上述示例中,我们计算了一个数组nums的大小为k的滑动窗口中的最大和。首先,我们计算了初始窗口的和。然后,我们通过滑动窗口的方式更新窗口的和,每次移动一个元素。我们使用一个变量`maxSum`来保存窗口中的最大和,并在移动窗口时更新该值。最后,我们返回`maxSum`作为结果。
以上就是一个滑动窗口算法的Java示例。这种算法在解决子序列问题和滑动窗口问题时非常实用。
### 回答3:
滑动窗口算法是一种经典的解决问题的方法,它的核心思想是通过维护一个固定大小的窗口来解决问题。这个窗口可以是一个数组或是一个双指针区间,随着窗口的移动,我们可以快速得到一些问题的解。
下面是一个简单的Java示例来说明滑动窗口算法的应用。
```java
public class SlidingWindowAlgorithm {
public int findMaxSum(int[] nums, int k) {
int windowSum = 0;
int maxSum = 0;
int windowStart = 0;
for (int windowEnd = 0; windowEnd < nums.length; windowEnd++) {
windowSum += nums[windowEnd];
if (windowEnd >= k - 1) {
maxSum = Math.max(maxSum, windowSum);
windowSum -= nums[windowStart];
windowStart++;
}
}
return maxSum;
}
public static void main(String[] args) {
SlidingWindowAlgorithm slidingWindow = new SlidingWindowAlgorithm();
int[] nums = {2, 1, 5, 1, 3, 2};
int k = 3;
int maxSum = slidingWindow.findMaxSum(nums, k);
System.out.println("滑动窗口中的最大和为: " + maxSum);
}
}
```
在这个示例中,我们需要找出长度为k的连续子数组的最大和。使用滑动窗口算法,我们维护一个窗口的大小为k,通过循环逐步移动窗口的起始位置和结束位置。每次窗口移动后,我们根据窗口内的元素计算窗口的和。当窗口的结束位置达到数组的末尾时,我们就得到了连续子数组的最大和。
这个示例中的滑动窗口算法的时间复杂度为O(n),其中n是数组的长度。通过维护窗口的和,我们在一次循环中就能得到结果,避免了暴力穷举的方法。滑动窗口算法在处理连续子数组、字符串等问题时具有高效的特点,是解决这类问题的常用方法。
阅读全文