滑动窗口是一种常用的算法技巧,适用于处理连续子数组或子字符串的问题。它通过维护一个固定大小的窗口,在数组或字符串上进行滑动,并根据特定条件来调整窗口的位置和大小。
以下是一个简单的示例代码,展示如何使用滑动窗口解决子数组和大于等于目标值的最小长度问题:
public class SlidingWindowExample {
public static int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
int left = 0; // 窗口左边界
int sum = 0; // 窗口内元素的和
int minLength = Integer.MAX_VALUE; // 记录最小长度
for (int right = 0; right < n; right++) {
sum += nums[right]; // 扩展右边界
while (sum >= target) { // 当窗口内元素和大于等于目标值时,收缩左边界
minLength = Math.min(minLength, right - left + 1); // 更新最小长度
sum -= nums[left]; // 收缩左边界
left++; // 左边界右移一位
}
}
return minLength != Integer.MAX_VALUE ? minLength : 0;
}
public static void main(String[] args) {
int[] nums = {2, 3, 1, 2, 4, 3};
int target = 7;
int minLength = minSubArrayLen(target, nums);
System.out.println("最小子数组长度:" + minLength);
}
}
在上述示例中,minSubArrayLen
函数接收一个目标值 target
和一个整数数组 nums
。它使用滑动窗口来寻找数组中和大于等于目标值的最小连续子数组的长度。
通过维护窗口的左右边界、计算窗口内元素的和,以及根据条件调整左右边界,可以实现滑动窗口算法。在每次扩展或收缩窗口时,更新最小长度,并在遍历完整个数组后返回结果。
这只是滑动窗口算法的一种简单应用,实际应用场景可能更为复杂,需要根据具体问题进行相应的调整和优化。
内容由零声教学AI助手提供,问题来源于学员提问