当前位置: 首页 > news >正文

长度最小的子数组-滑动窗口解法

本来觉得自己双指针学的还可以了,于是今天直接刷了一道滑动窗口题,没想到还是被坑绊倒了两次。这次我想记录在博客里,不仅可以防止我以后重蹈覆辙,兴许也还可以帮助到其他人。

题目来自力扣:209. 长度最小的子数组 - 力扣(LeetCode)

最一开始,以为自己双指针学的很好,刚好也可以用到这道题上。于是有了思路:定义两个指针,一个指针走的快,一个指针走的慢。初始化sum=0用来记录两个指针走过的数组和。快指针先走,快指针每走一个数就将其存入sum中,直到sum>=target就停下,记录len=Math.min(len,i-j+1),然后慢指针开始向后遍历数组,并让快指针回到慢指针的位置,重复之间的动作。这个方法就是暴力解法,也是我陷入的第一个固定思维。

代码如下:

    public int minSubArrayLen(int s, int[] nums) {
        int sum=0;
        int len=0;
        for (int j=0;j<nums.length;j++){
            int i=j;
            while(i<=nums.length){
                if (sum<s){
                    sum+=nums[i++];
                }else {
                    len=Math.min(len,i-j+1);
                }
            }
        }
        return len;
    }

这个误区在于,我没有正确认识到要把哪个指针放到while中,如果是把快指针放入while中,那如果sum>target,直接让sum减掉num[慢指针]就好了呀,这样慢指针也只需要遍历一次。

代码如下:

    public int minSubArrayLen2(int s, int[] nums) {
        int sum=0;
        int len=Integer.MAX_VALUE;
        int start=0;
        for (int end=0;end<nums.length;end++){
            sum+=nums[end];
            while (sum>=s){
                len=Math.min(len,end-start+1);
                sum-=nums[start];
                start++;
            }
        }
        return len==Integer.MAX_VALUE?0:len;
    }

注意:要用while (sum>=s)而不是if (sum>=s)。因为要一直让快指针走,直到sum>=s后,慢指针才能向前走。

相关文章:

  • 我的世界1.20.1forge模组开发进阶教程——Geckolib动画实体(3)
  • ASL集睿致远 CS5265AN typec转hdmi4k60hz方案
  • 【Java】——运算符详解
  • 60V耐压 DC降压芯片SL3037B替换MP2459 MP2451 MP2456 MP2457
  • 19、TCP连接四次挥手的过程,为什么是四次?【高频】
  • 华为hcia——Datacom实验指南——TCP传输原理和数据段格式
  • 优选算法的匠心之艺:二分查找专题(一)
  • C语言【数据结构】:时间复杂度和空间复杂度.详解
  • 传感云揭秘:边缘计算的革新力量
  • 【Qt】QWidget属性介绍
  • Vmware安装ubuntu18.04
  • Kotlin apply 方法的用法和使用场景
  • 态势感知产品通用的一些安全场景设计
  • 防火墙虚拟系统配置
  • Gitlab报错:sudo: a password is required
  • 无障碍阅读(Web Accessibility)NVDA打开朗读查看器后,enter键不生效的原因
  • 如何处理PHP中的文件上传错误
  • 《计算机图形学》第二课笔记-----二维变换的推导
  • 时序数据库 TDengine 到 MySQL 数据迁移同步
  • 【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
  • 以总理称将全面控制加沙,对伊朗保留单方面行动权利
  • 《远山淡影》改编电影入围戛纳关注单元,张怡微谈石黑一雄
  • 媒体刊文:“假官号”层出不穷,平台要当好把关人
  • 我国成功发射中星3B卫星
  • 东南亚五大经济体一季度增长放缓,美国关税大棒或阻全年增长
  • 一周人物|收藏家瓦尔特捐出藏品,女性艺术家“对话”摄影