力扣—长度最小的子数组

文章目录

    • 题目解析
    • 解题思路
    • 代码实现

题目解析

给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的
子数组
[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

示例 1:

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

解题思路

暴力解法,我们可以找出所有的子数组,然后再求解。但是时间复杂度高,不适合。不过我们在子数组的过程可以发现一些规律,得到一些优化。例如 nums = [2,3,1,2,4,3],target = 7,当我们找到子数组[2,3,1,2],这个子数组已经满足里题目要求,如果我们再在这个子数组的基础上向后遍历加上其他数字变为[2,3,1,2,4],(正整数的数组)虽然同样也满足题目要求但数组长度明显会大于前一个数组,所以这样的子数组我们应该排除掉。直接找满足target的最小数组就可以了。

这种用同向指针(两个指针同时向前或后移动),方法有个名字叫滑动窗口。

代码实现

Java实现

class Solution {
    public int minSubArrayLen(int target, int[] nums) 
    {
     int n=nums.length;
     int i=0,j=0,sum=0;
     int length=1000000;
     int ret=0;
     while(j<n)
     {
        sum=sum+nums[j];
        while(sum>=target)
        {
         ret=j-i+1;
         length=Math.min(length,ret);
         sum=sum-nums[i++];
        }
        j++;
     }
     if(ret==0)
     {
        return 0;
     }
     return length;
    }
}

解释代码

int n = nums.length;
int i = 0, j = 0;  // i 和 j 分别表示子数组的起始和结束位置
int sum = 0;       // sum 表示当前子数组的和
int length = 1000000;  // 初始化一个较大的长度值,用于记录最短子数组的长度
int ret = 0;       // ret 用于记录当前子数组的长度
while (j < n) {
    sum = sum + nums[j];
    while (sum >= target) {
        ret = j - i + 1;  // 计算当前子数组的长度
        length = Math.min(length, ret);  // 更新最短子数组的长度
        sum = sum - nums[i++];  // 移动左指针,缩小子数组范围,更新和
    }
    j++;  // 移动右指针,扩大子数组范围
}
if (ret == 0) {
    return 0;  // 如果没有找到满足条件的子数组,返回 0
}
return length;  // 返回最短子数组的长度

在这里插入图片描述
C语言实现

int minSubArrayLen(int target, int* nums, int numsSize) 
{
    int i=0;
	int j=0;
	int sum=0;
	int ret=INT_MAX;
	int length=0;
    for(j=0;j<numsSize;j++)
    {
		sum+=nums[j];
    	while(sum>=target)
		{
			length=j-i+1;
			ret=ret>length?length:ret;
			sum=sum-nums[i++];
		}
	}

    if(length==0)
    {
		return 0;
	}
	else
	{
		return ret;
	}
}

感谢您的阅读,欢迎评论,点赞,你们的支持就是对我最大的鼓励。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

捷配笔记-HDI板与普通PCB板的区别

HDI是什么? HDI(High Density Interconnect) 全称高密度互连板&#xff0c;是一种线分布密度高的高密度电路板&#xff0c;在现代电子设备中扮演着至关重要的角色。 它具有轻薄、线路密度高、有利于先进构装技术的使用、电气特性与信号更佳、改善射频干扰/电磁波干扰/静电释放…

matlab PID tuner整定工具箱的用法

从主页的APP中搜索到它&#xff1a; 按照下图IMPORT导入被控对象的传递函数 在下图的Inspect按钮中可以看到导入的被控对象的传函。 在下图的Type中选择控制器类型&#xff1a; 在下图的Form中选择PID的形式&#xff1a;有两种可选&#xff1a;平行式Parallel和标准式Standard …

K8S 上部署 Emqx

文章目录 安装方式一&#xff1a;快速部署安装方式二&#xff1a;定制化部署1. 使用 Pod 直接部署 EMQX Broker2. 使用 Deoloyment 部署 Pod3. 使用 Services 公开 EMQX Broker Pod 服务4. 通过 kubernetes 自动集群 EMQX MQTT 服务器5. 修改 EMQX Broker 的配置6. 赋予 Pod 访…

阿里云短信PHP集成api类

无需安装sdk扩展包&#xff0c;直接引入类即可使用 V3版本请求体&签名机制:自研请求体和签名机制 - 阿里云SDK - 阿里云 模版内容&#xff1a; <?phpnamespace common\components;use common\constant\UserConst; use common\models\bee\SmsReferer; use common\mode…

【VScode】安装【ESP-IDF】插件及相关工具链

一、ESP-IDF简介 二、VScode安装ESP-IDF插件 三、安装ESP-IDF、ESP-IDF-Tools以及相关工具链 四、测试例程&编译烧录 一、ESP-IDF简介 二、VScode安装ESP-IDF插件 【VScode】安装配置、插件及远程SSH连接 【VSCode】自定义配置 打开VScode&#xff0c;在插件管理搜索esp…

【程序大侠传】服务发布引发mq消息重复消费

前序 在编程武侠世界中&#xff0c;有一个门派“天机楼”&#xff0c;连接并协调各大门派之间的关系&#xff0c;确保整个江湖的运作流畅无阻。天机楼住要的业务范围主要如下&#xff1a; 信息传递的信使&#xff1a; 天机楼就像是江湖中的飞鸽传书&#xff0c;确保各门派之间…

泛微Ecology8明细表对主表赋值

文章目录 [toc]1.需求及效果1.1 需求1.2 效果2.思路与实现3.结语 1.需求及效果 1.1 需求 在明细表中的项目经理&#xff0c;可以将值赋值给主表中的项目经理来作为审批人员 1.2 效果 在申请人保存或者提交后将明细表中的人名赋值给主表中对应的值2.思路与实现 在通过js测…

【大型实战】企业网络实验(华为核心交换、ESXI7.0vmware虚拟机、DHCP中继、服务端网络及用户端网络配置)

需求 实验 vmware网络配置&#xff08;企业内部一般为ESXI&#xff09; 这样服务器虚拟机使用192.168.200.X网段才能与用户侧互通 vmware虚拟机配置&#xff08;DHCP服务器网络配置&#xff09; 打开网络管理页面 nmtui重置一下网络连接&#xff08;重启网卡&#xff09; …

JAVA @interface自定义注解(自定义注解+环绕通知 记录操作日志)

简介 注解interface是一种在Java代码中添加元数据&#xff08;metadata&#xff09;的方式&#xff0c;它可以用于提供程序的额外信息&#xff0c;但本身并不会直接影响程序的执行。注解可以应用于类、方法、字段和其他程序元素&#xff0c;用于提供关于这些元素的额外信息。 …

计算机组成原理 运算器

运算方法和运算器&#xff08;重点&#xff09; B二进制(binary), D十进制(decimal), H十六进制(hexadecimal) 纯小数和纯整数表示范围 设机器字长n1位&#xff0c;规定最高位&#xff08;第n1位&#xff09;为符号位 纯小数最大范围中的可理解为小数部分全为0的“1”&#…

TCP连接三次握手的过程,为什么是三次,可以是两次或者更多吗?

(1) 三次握手的过程 第一次握手&#xff1a;客户端向服务器发送一个包含SYN &#xff08;同步序列编号&#xff09;和初始序列号&#xff08;ISN&#xff09;的报文&#xff0c;请求建立连接&#xff0c;客户端进入SYN_SENT (同步已发送)状态。第二次握手&#xff1a;服务器收…

Python酷库之旅-第三方库Pandas(027)

目录 ​一、用法精讲 68、pandas.infer_freq函数 68-1、语法 68-2、参数 68-3、功能 68-4、返回值 68-5、说明 68-6、用法 68-6-1、数据准备 68-6-2、代码示例 68-6-3、结果输出 69、pandas.interval_range函数 69-1、语法 69-2、参数 69-3、功能 69-4、返回值…

Open3D Ransac拟合空间直线

目录 一、概述 1.1实现步骤 1.2优势与局限 二、代码实现 2.1关键代码 2.2完整代码 三、实现效果 前期试读&#xff0c;后续会将博客加入该专栏&#xff0c;欢迎订阅 Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概述 RANSAC&…

VScode终端和外部终端中文乱码问题

VScode终端和外部终端中文乱码问题 前言VScode终端VScode的第二大特点方法一方法二外部终端&#xff08;命令为ctrlf5&#xff09; 总结实现VScode终端和外部终端都能运行可执行文件 心得 前言 如果只想要看解决方案可直接跳转到总结部分&#xff0c;其余的章节只是用来说明原…

解决C#读取US7ASCII字符集oracle数据库的中文乱码

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;全栈领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录 前言一、解决方法二、安装System.Data.OleDb连接库三…

第7章 模块(2)

目录 7.3 插入和删除模块 7.3.1 模块的表示 7.3.2 依赖关系和引用 7.3.3 模块的二进制结构 7.3.4 插入模块 7.3.5 移除模块 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 7.3 插入和删除模块 两个系统调用&#xff1a; init_module&#xff1…

考研数学二战,怎么准备才能提升大?

一战70多...二战提升空间那是相当的大 我身边很多一战甚至不到60&#xff0c;二战成绩飙到120的&#xff0c;真的很猛 所以你根本不用担心是自己学数学没天赋&#xff0c;其实知识方法没用对而已 本人属于基础很差相当于是零基础的23考研党&#xff0c;经过一年备考成功上岸…

k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheusgrafanaalertmanager k8s环境如下&#xff1a;机器规划&#xff1a; node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置…

JayChou周杰伦的歌曲网易云音乐怎么听

听Jay自由 网易云导入 专辑介绍 周杰伦&#xff08;Jay Chou&#xff09;是一位著名的台湾流行歌手、词曲创作人和演员。他以其独特的音乐风格和才华横溢的创作能力而闻名于世。以下是对周杰伦所有专辑的简要介绍&#xff1a; 《Jay》&#xff08;2000年&#xff09;&#xf…

独立开发者系列(26)——域名与解析

域名&#xff08;英语&#xff1a;Domain Name&#xff09;&#xff0c;又称网域&#xff0c;是由一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。 由于IP地址不方便…