下面一次性给出 滑动窗口10道经典例题,分定长窗口、不定长(最小/最大长度)、字符哈希窗口三大类,每道包含题意、思路、完整Java代码,可直接运行。滑动窗口核心分类固定长度窗口:窗口大小不变,逐个滑动统计最值可变长度窗口(同向双指针):满足条件收缩左边界字符频次窗口:用数组/HashMap统计窗口内字符数量例题1 长度固定子数组最大和(定长滑动窗口)题目给定数组nums和固定长度k,求长度为k的连续子数组最大累加和。public double findMaxAverage(int[] nums, int k) {int sum = 0;// 初始化第一个窗口for (int i = 0; i k; i++) {sum += nums[i];}int max = sum;// 滑动for (int i = k; i nums.length; i++) {sum = sum - nums[i - k] + nums[i];max = Math.max(max, sum);}return (double) max / k;}例题2 最小长度子数组和≥target(可变窗口)题目正整数数组,找出和≥target的最短连续子数组长度,不存在返回0。public int minSubArrayLen(int target, int[] nums) {int left = 0, sum = 0;int res = Integer.MAX_VALUE;for (int right = 0; right nums.length; right++) {sum += nums[right];while (su
滑动窗口算法详细讲解
发布时间:2026/6/13 8:31:13
下面一次性给出 滑动窗口10道经典例题,分定长窗口、不定长(最小/最大长度)、字符哈希窗口三大类,每道包含题意、思路、完整Java代码,可直接运行。滑动窗口核心分类固定长度窗口:窗口大小不变,逐个滑动统计最值可变长度窗口(同向双指针):满足条件收缩左边界字符频次窗口:用数组/HashMap统计窗口内字符数量例题1 长度固定子数组最大和(定长滑动窗口)题目给定数组nums和固定长度k,求长度为k的连续子数组最大累加和。public double findMaxAverage(int[] nums, int k) {int sum = 0;// 初始化第一个窗口for (int i = 0; i k; i++) {sum += nums[i];}int max = sum;// 滑动for (int i = k; i nums.length; i++) {sum = sum - nums[i - k] + nums[i];max = Math.max(max, sum);}return (double) max / k;}例题2 最小长度子数组和≥target(可变窗口)题目正整数数组,找出和≥target的最短连续子数组长度,不存在返回0。public int minSubArrayLen(int target, int[] nums) {int left = 0, sum = 0;int res = Integer.MAX_VALUE;for (int right = 0; right nums.length; right++) {sum += nums[right];while (su