Java教程

双指针之滑动窗口,不会的进

本文主要是介绍双指针之滑动窗口,不会的进,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

什么是滑动窗口?

如何使用滑动窗口?

上经典题型:

相关力扣题:


什么是滑动窗口?

类似于实际生活中的窗口:左边框+中间的部分+有边框。随着左边框和有边框不断的在数组上移动,中间的部分也跟随者移动,因此有了窗口在滑动的感觉,顾名滑动窗口。

如何使用滑动窗口?

确定三部分:

  • 窗口内是什么?
  • 如何移动窗口的起始位置?
  • 如何移动窗口的结束位置?

上经典题型:

连接:

https://leetcode-cn.com/problems/minimum-size-subarray-sum/

题目:

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

用例1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]是该条件下的长度最小的子数组。

解法1: 双指针之滑动窗口

代码:

import java.util.*;
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //双指针之滑动窗口   思想:贪心算法。
        int s=0; //窗口开始的位置
        int result=Integer.MAX_VALUE;//定义一个整型变量中无限大的数;
        int sum=0;//滑动窗口内的值
        int sumLength=0;// 记录滑动窗口的长度。
        for(int e = 0 ; e < nums.length ;e++){
            sum+=nums[e];//一直更新窗口内的值。
            while(sum>=target){ //驱动窗口移动找寻最小的连续子数组长度
                sumLength=(e-s+1);//计算窗口的
                result = result < sumLength ? result : sumLength; //根之前的窗口比较找到最小的窗口。
                sum -= nums[s++];//更新窗口开始的位置。
            }
        }
        return result == Integer.MAX_VALUE? 0 : result;
    }
}

解法2:暴力解法:

代码:

import java.util.*;
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //来个暴力一点的解法 。。。。。。两个for循环
        // 第一个for循环从0开始负责遍历整个数组
        //第二个for循环负责在第一个for循环此时位置的基础上找刚好大于目标值的位置,
        int result=Integer.MAX_VALUE;
        int sum=0;
        int subLength=0;
        for(int i = 0;i<nums.length;i++){
            sum=0;
            for(int j=i;j<nums.length;j++){
                sum+=nums[j];
                if(sum>=target){
                    subLength=j-i+1;
                    result = result<subLength?result:subLength;
                    break;
                }
            }
        }
        return result == Integer.MAX_VALUE? 0 : result;
    }
}

相关力扣题:

  •  904.水果成篮
  • 76.最小覆盖子串
这篇关于双指针之滑动窗口,不会的进的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!