LeetCode209——长度最小的子数组

news2024/9/30 15:33:05

LeetCode209——长度最小的子数组

题目描述:

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

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
在这里插入图片描述

1.Result01(两层for循环)

暴力解:两层for循环依次寻找,并不断更新子序列长度值。
在这里插入图片描述

在这里插入图片描述
时间复杂度有点高——O(N2)。

 public static int minSubArrayLen(int target, int[] arr) {
        int min = Integer.MAX_VALUE;//记录当前子序列长度最小值 初始值设为Integer类的常量MAX_VALUE
        for (int i = 0; i < arr.length; i++) {
            int sum = arr[i];//变量sum用于记录子序列中数据之和

            if (sum >= target)//第一个元素就满足,即最小子序列长度为1
                return 1;
            for (int j = i + 1; j < arr.length; j++) {
                sum += arr[j];//在增加子序列长度的同时 累加子序列数据之和

                if (sum >= target) {//满足条件之后 更新当前最短子序列长度的值
                    min = Math.min(min, j - i + 1);
                    break;//跳出内部循环 继续从外部循坏开始往后找
                }
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;//min值仍为初始值,未改变的话 即不存在符合条件的子数组 返回0
    }

2.Result02(滑动窗口)

滑动窗口:不断地调节子序列的起止位置和终止位置,从而得出我们想要的结果。

窗口就是 满足其和 ≥ target 的长度最小的 连续 子数组。

窗口的起始位置如何移动:如果当前窗口的值大于target了,窗口就要向前移动了(也就是该缩小了)。

窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

滑动窗口详解链接:代码随想录
请添加图片描述
在这里插入图片描述

 public int minSubArrayLen(int target, int[] arr) {

        int left = 0;//滑动窗口的起始位置

        int sum = 0;//滑动窗口内数值之和

        int result = Integer.MAX_VALUE;//初始值

        for (int right = 0; right < arr.length; right++) {

            sum += arr[right];//存滑动窗口中的数值之和

            while (sum >= target) {//当窗口内元素满足条件的时候 开始缩小窗口
                result = Math.min(result, right - left + 1);//更新窗口最小值
                sum -= arr[left];//减去窗口中删去的元素值
                left++;//缩小窗口起始位置
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode:1465. 切割后面积最大的蛋糕 | 贪心 + 排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

高校打造动捕实训室:开启元宇宙创新教育时代

随着科技的发展&#xff0c;高校教育面临着新的挑战与机遇。高校动捕实训室涉及多个学科领域&#xff0c;如艺术学院、设计学院、新媒体学院等&#xff0c;适用于动画、视觉传达、数码媒体、数字媒体艺术等专业。动捕实训室可以为学生提供创意发挥的空间&#xff0c;使用动捕设…

【文末送书】GPT如何赋能软件研发全流程

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Typora(morkdown编辑器)的安装包和安装教程

Typora&#xff08;morkdown编辑器&#xff09;的安装包和安装教程 下载安装1、覆盖文件2、输入序列号①打开 typora &#xff0c;点击“输入序列号”&#xff1a;②邮箱一栏中任意填写&#xff08;但须保证邮箱地址格式正确&#xff09;&#xff0c;输入序列号&#xff0c;点击…

Web3 治理实践探讨:如何寻找多元化发展路径?

Web3 领域变革正崭露头角&#xff0c;而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径&#xff0c;究竟是治理模型的精进成为首要问题&#xff0c;还是吸纳更多资金与组织教育培训&#xff0c;让开发者成为项目建设的中坚力量&#xff1f;本期 TinTinW…

聚量推客滴滴学生认证app地推网推拉新升级啦

“聚量推客”滴滴学生认证项目升级 滴滴学生认证升级后分为微信推广版本和支付宝推广版本两种码 根据自己需要选择推广场景&#xff0c;适合地推和网推

ReentranLock超详细讲解

目录 ReentranLockAQS底层AQS的变量、常量与内部类Node内部类 FairSync&#xff1a;公平锁lock方法AbstractQueuedSynchronizer的acquire方法tryAcquire方法getState方法setExclusiveOwnerThread方法总结tryAcquire方法 返回AbstractQueuedSynchronized的acquire方法acquireQue…

「AI知多少」第二期推荐《AIGC:智能创作时代》

一、书名 《AIGC&#xff1a;智能创作时代》 二、简介 在人工智能发展的漫长历程中&#xff0c;如何让机器学会创作一直被视为难以逾越的天堑&#xff0c;“创造力”也因此被视为人类与机器最本质的区别之一。然而&#xff0c;人类的创造力也终将赋予机器创造力&#xff0c;…

YTM32的增强型定时器eTMR外设模块详解

文章目录 eTMR外设简介eTMR工作机制系统框图引脚与信号计数器与时钟源输出比较模式PWM模式通道配对通道对的互补输出&#xff08;Complementary Mode&#xff09;双缓冲输出PWM&#xff08;Double Switch&#xff09;错误检测机制&#xff08;Fault Detection&#xff09; 输入…

搭建confluence

confluent是一款由JAVA编写用于企业知识库管理协同软件&#xff0c;多用于构建企业内部WIKI&#xff0c;支持多人协作&#xff0c;共享信息等。 当前系统环境Centos7.9&#xff0c;内存至少2G以上&#xff0c;数据库采用MySQL5.7&#xff0c;本机电脑系统Windows10 安装前准备…

uboot图形化配置界面添加自定义菜单

一. 简介 图形化配置工具的主要工作就是在 .config 下面生成前缀为“ CONFIG_ ”的变量&#xff0c;这些变量一般都要值&#xff0c;为 y &#xff0c; m 或 n &#xff0c;在 uboot 源码里面会根据这些变量来决定编译哪个文件。 本文我 们就来学习一下如何添加自己的自…

十大排序算法(C语言)

参考文献 https://zhuanlan.zhihu.com/p/449501682 https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&…

汽车行驶性能的主观评价方法(1)-底盘校准方法

底盘校准的目的是&#xff0c;从行驶性能和行驶舒适性两个方面进行协调&#xff0c;从而优化行驶动力学特性。为了达到这一目标&#xff0c;工程人员早在设计阶段&#xff0c;就对大多数对行驶动力性有重要意义的部件提出了要求。这些要求不仅与底盘的组件有关&#xff0c;还必…

PDE 中的先验估计是什么意思?

见 知乎 https://www.zhihu.com/question/52567966

现在学编程还有出路吗?程序员的出路在哪里?

程序员的出路有很多&#xff0c;以下是一些常见的职业发展方向&#xff1a; 技术专家 。程序员可以专注于技术领域&#xff0c;成为某个技术领域的专家&#xff0c;并从事技术咨询、培训、研发等方面的工作。创业者 。程序员可以结合自身技术背景&#xff0c;创办自己的公司&a…

【App 抓包提示网络异常怎么破?】

背景 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。以“贝壳找房”为例: 455 x 705 Fiddler中看到的请求是这样的: 619 x 215 你可能开始找证书的问题:是不是Fiddler/Charles的证书没有…

哪些场景需要额外注意线程安全问题

今天我们主要学习哪些场景需要额外注意线程安全问题&#xff0c;在这里总结了四种场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问 static 静态变量&#xff0c;访问共享的缓存&#xff0c;…

python内置函数sorted()

列表对象提供了sort()方法支持原地排序,而内置函数sorted()返回新列表,并不对原列表进行任何修改sorted()可以对列表,元组,字典,range对象等进行排序列表的sort()方法和内置函数sorted()都支持key参数实现复杂排序要求 例1 person [{name: zhangsan, age: 37},{name: lisi, …

CSRF跨域请求伪造

1.SSRF服务端请求伪造&#xff08;外网访问内网&#xff09; SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要目标网站的内部系统。&#xff08;因为他是从内部系统访问的&#xf…

常见的云测试策略及重要性

随着云计算技术的快速发展&#xff0c;云服务已经成为了现代应用程序开发和部署的核心组成部分。然而&#xff0c;随之而来的是对云系统性能和质量的不断追求&#xff0c;这使得云测试变得至关重要。本文将探讨云测试的概念、重要性以及一些常见的云测试策略和工具。 一、云测试…