【LeetCode每日一题】长度最小的子数组

news2024/9/21 1:24:14

【LeetCode每日一题】长度最小的子数组

在这里插入图片描述
在这里插入图片描述

标签:

二分,前缀和,滑动窗口,双指针

  • 前缀和&二分

target要大于等于子数组nums[l]到nums[r]这段连续区间的和,因此想到用前缀和sums[r]-sums[l-1]可以快速求得区间和。

如何寻找target呢,要寻找sums[r]-sums[l-1]>=target,移项得sums[r]>=target+sums[l-1],也就是在数组中寻找sums[r]这样得数,使他大于等于target+sum[l-1]。

如何快速查找,因为前缀和数组是递增数组,可以使用二分查找

class Solution {
public:
    int binary_serach(int t,int l,int r,vector<int>&sums)
    {   int mid;
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(sums[mid]>=t)r=mid-1;
            else l=mid+1;
        }
        if(sums[l]>=t)return l;
        return 0;
    }
    int minSubArrayLen(int target, vector<int>& nums) {
    int ans=INT_MAX;
    int n=nums.size();
    if(n==0)return 0;
    int l,r;
    vector<int>sums(n+2,0);//开一个大一点得vector数组,因为这里使用前缀和数组用1开始做下标
    for(int i=1;i<=n;i++)sums[i]=sums[i-1]+nums[i-1];//前缀和
    for(int i=1;i<=n;i++)
    {
        int t=target+sums[i-1];//寻找sums[r]-sums[l-1]>=target,转化为寻找sums[r]>=sum[l-1]+target
        l=0,r=n;
        int x=binary_serach(t,l,r,sums);
        if(x)ans=min(ans,x-(i-1));
    }
    if(ans==INT_MAX)return 0;
    return ans;
    }
};
  • 双指针&滑动窗口

    设置两个指针i和j,j一直向右移动,i符合条件才移动

    因为是寻找长度最小的子数组,当sum>=target时,记录长度,然后i要向右移动,当sum<target时j继续移动,寻找下一个sum>=target的条件

    class Solution {
    public:
        int minSubArrayLen(int target, vector<int>& nums) {
        int n=nums.size();
        int ans=INT_MAX;
        long long sum=0;
        for(int i=0,j=0;j<n;)
        {
            sum+=nums[j];
            while(sum>=target)
            {
                ans=min(ans,j-i+1);
                sum=sum-nums[i];
                i++;
            }
            j++;
        }
        if(ans==INT_MAX)return 0;
        return ans;
        }
    };
    

    网友的理解方式通俗易懂
    在这里插入图片描述

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

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

相关文章

1.DM8下载与安装

下载地址&#xff1a;产品下载 | 达梦数据库 DM8的安装与卸载&#xff0c;请参考课件资料中的《DM8 Install.pdf》。 2.DM8管理工具 更多的DM8管理工具请查看官方文档。 2.1.DM服务查看器 DM 服务查看器&#xff0c;顾名思义是对数据库服务进行查看管理的工具。通过服务查看…

JNDI-反序列化

参考博客&#xff1a; JNDI注入与动态类加载 分析版本 jdk8u201 流程分析 在前面JNDI-ldap绕过分析中提到&#xff0c;存在ldap原生反序列化利用点。 再回顾一下&#xff0c;在deserializeObject private static Object deserializeObject(byte[] var0, ClassLoader var…

Linux 命令,grep 说明与使用

1&#xff1a;grep命令功用&#xff1a; 一种强大的文本搜索工具&#xff0c;在一个或多个fles中搜索与正则表达式pattern相匹配的行。 如果有匹配行&#xff0c;则退出状态是0;如果没有匹配的行&#xff0c;则退出状态是1;有错误时退出状态是2。 2&#xff1a;命令构件: grep…

TypeScript 安装教程

安装TypeScript 下载并安装Node.js使用npm全局安装 npm install -g typescript版本查询 tsc -v 安装成功&#xff0c;但是执行tsc -v 命令&#xff0c;查看安装的ts版本时报错&#xff1a; tsc : 无法加载文件 D:\nodejs\node_global\tsc.ps1&#xff0c;因为在此系统上禁止…

软件测试之测试用例总结【含模板】

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件…

最新版人声处理插件Soundevice Digital Voxessor,winmac,持续更新

一。 多合一人声处理插件 Soundevice Digital Voxessor Soundevice Digital Voxessor是一款专门针对人声处理的效果器。它具有出色的计量功能和大量用于精确调整的参数&#xff0c;能够帮助用户快速获得美妙的声音。此外&#xff0c;它还提供了多种功能&#xff0c;如瞬间完美配…

SpringCloud-服务保护和分布式事务

一、雪崩问题 &#xff08;1&#xff09;雪崩问题 1.雪崩问题产生的原因是什么&#xff1f; ①微服务相互调用&#xff0c;服务提供者出现故障或阻塞。 ②服务调用者没有做好异常处理&#xff0c;导致自身故障。 ③调用链中的所有服务级联失败&#xff0c;导致整个集群故障…

57_2设置Servlet模板、Servlet线程安全问题、跳转

设置Servlet模板 再创建类就有了 模板代码 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j…

java开发环境搭建基础番外篇之----Maven在windows的安装及配置

一.背景 公司安排了带徒弟任务&#xff0c;写点基础的环境搭建这些吧。搭建基础开发环境&#xff0c;主要是jdk、eclipse、git、maven、mysql。后续再考虑编写jenkins、nexus、docker、1panel等CI/CD环境搭建。 本次主要内容是maven在window是系统中的安装及配置。我的开发环境…

电梯节能(能量回馈)样板间,现场勘察效果

一、现场勘察&#xff1a;电表倒转回馈 二、真实数据 三、真实现场勘察情况&#xff1a; 【电梯机房背景】 2023-07-26日&#xff0c;电梯机房勘察&#xff08;该机房控制2部电梯&#xff0c;分为【内外】间&#xff0c;各有1台电梯控制柜控制1台电梯&#xff09;。 【发热电…

美股收涨英伟达大涨,美联储降息预期升温

昨夜美股三大股指集体收涨&#xff0c;受“小非农”数据与鲍威尔为9月开启降息背书的利好影响&#xff0c;英伟达大涨近13%&#xff0c;引领科技股强势反弹。 一、大盘动态 截至收盘&#xff0c;道指涨0.24%&#xff0c;纳指涨2.64%&#xff0c;标普涨1.58%。美国十年国债收益…

记一次mybatisplus和postgresql自增主键冲突的问题解决

问题出现前提&#xff1a; 1. postgresql设置字段自增 2. springboot项目集成mybatisplus向表中新增数据 现象&#xff1a;db中字段没有自增且无规律。 springboot项目中实体类如下&#xff1a; 其中id为本次要自增的字段。 整个设置字段自增的过程&#xff1a; 首先&…

el-table-column 遍历 如何将 year 作为表头 processstatus为值

使用 Vue 的计算属性来动态生成列&#xff0c;并使用 v-for 在 <el-table> 的 <el-table-column> 上来遍历这些列。此外&#xff0c;我们还需要一个方法来处理每行数据的显示&#xff0c;因为每行的数据&#xff08;sonList&#xff09;需要根据年份来显示对应的 p…

uniapp使用uView的单选框自定义图片标题和副标题

效果图&#xff1a; 我这边是在一个弹框里面&#xff0c;需要一个单选框 实现代码&#xff1a; html代码&#xff1a; <u-popup :round"15" mode"center" :closeOnClickOverlay"false" bgColor"transparent"><view class&…

水泥电阻在电源电路中的作用

水泥电阻是将电阻线绕在无碱性耐热瓷件上&#xff0c;外面加上耐热、耐湿及耐腐蚀之材料保护固定并把绕线电阻体放入方形瓷器框内&#xff0c;用特殊不燃性耐热水泥充填密封而成。水泥电阻的外侧主要是陶瓷材质&#xff08;一般可分为高铝瓷和长石瓷&#xff09;。 水泥电阻器…

navicat 17 安装

百度网盘 链接: https://pan.baidu.com/s/1nFFQzWhjxRUM_X6bVlWNGw?pwd8888 提取码: 8888 1.双击运行安装包 2.点击下一步 2.勾选我同意&#xff0c;点击下一步 3.自定义安装路径&#xff0c;点击下一步 4.注意勾选桌面快捷方式&#xff0c;点击下一步 5.点击安装 6.点击完…

游戏类型有哪些?游戏分类详细解说(二)

在游戏行业中&#xff0c;对游戏进行分类可以帮助玩家、开发者和市场分析师更好地理解市场趋势、玩家偏好和游戏设计元素。 游戏分类可以从多个维度进行&#xff0c;上一期跟大家分享了目前现有的游戏品类&#xff0c;本期跟大家分享具体游戏分类维度&#x1f447; 1、题材维度…

要抓住国际白银现货行情 以下这几点需要注意

国际白银现货行情最近表现不甚稳定&#xff0c;在七月上旬出现了比较强势的上涨&#xff0c;但随后出现强势的下跌&#xff0c;跌破了30关口。如果我们要抓住国际白银现货行情&#xff0c;那么以下这几点我们就需要注意。 一&#xff0c;建立交易计划&#xff0c;并且按计划执行…

Day1-软件包管理及shell命令

1. Linux介绍 1.1 Linux的发展 在Unix基础上发展而来 GNU GUN is Not Unix GPL General Public License 1.2 各种Linux发行版本 Red Hat Ubuntu 1.3 Linux体系结构 1.4命令终端 在桌面环境下的命令终端仿真器程序很多&#xff0c;它们各有特色&#xff0c;拥有各自的用户…

QT——常用的窗口相关知识点

1. 常用的窗口标志设置 设置窗口无标题栏 // 设置窗口无标题栏this->setWindowFlags(Qt::CustomizeWindowHint);设置窗口无边框 // 设置窗口无边框setWindowFlags(Qt::FramelessWindowHint);设置窗口置顶 // 设置窗口置顶setWindowFlags(Qt::FramelessWindowHint|Qt::Windo…