算法题(33):长度最小的子数组

devtools/2025/1/13 15:23:49/

审题:

需要我们找到满足元素之和大于等于target的最小子数组的元素个数,并返回

思路:

核心:子数组共有n种起点,nums数组的每个元素都可以充当子数组的首元素,我们只需要先确定子数组的首元素,然后往后查找满足条件的最小下标,最后维护一个minsize即可

方法一:双层for循环

我们的第一层循环确定子数组首元素,然后第二层循环寻找满足条件的下标,并维护minsize。这个方法虽然简单,但是时间复杂度是O(N^2),会超时

方法二:前缀和 + 二分查找

二分查找的时间复杂度是logN,如果结合for循环和二分查找可以把时间复杂度优化到

O(N*longN)

!:题目说了所有数据都是正整数,所以前缀和一定是递增的,可以用二分

不过二分查找只能根据一个确定的值去找,所以我们要把求和预处理了,也就是先计算前缀和。

确定首元素和方法一一样,都是用一个for循环,然后二分查找大于等于target的第一个位置bound。

target是多少?

bound位置的前缀和减第i-1个元素的前缀和得到的就是第i-1个元素和bound位置元素之间的和,若该和大于等于s,则满足条件

所以有:target = s + sum[i-1]

而此时的子数组长度为bound - (i-1)

方法三:滑动窗口

优化前面两个方法,该方法时间复杂度为O(N)

我们创建一个start指针和一个end指针,一开始都指向nums首元素,其中start指针指向的是子数组的首元素,end指向的是子数组最后一个元素,维护minsize记录最小长度

解题:

方法二:前缀和 + 二分查找

sum[i]:表示的是前i个元素的前缀和

子数组的首和尾分别是第bound个数据和第i个数据,所以子数组size是bound-(i-1)

特殊处理:在return处,三目运算符的用处是处理没找到满足的子数组的情况,返回0

注意:sum.end()表示的不是最后一个有效数据的地址,而是其下一个地址,且此地址只有没找到bound才会返回

方法三:滑动窗口

其实方法三的核心也是通过每个子数组的首元素去运算。

当当前的sum不满足要求,就让end接着往下走

遇到满足要求就记录size并且让start++(这一步相当于start位置为首元素的子数组最小的size已经计算完了),但是因为不确定start++后是否仍满足,所以这里设置成循环

209. 长度最小的子数组 - 力扣(LeetCode)


http://www.ppmy.cn/devtools/150167.html

相关文章

在UE5中使用视差贴图

视差贴图是一项不用改动模型顶点,通过对相机向量进行计算、修改通过视差实现模型凹凸感的技术,通常运用于地面,配合法线贴图增强凹凸表现。 UE中封装了视差贴图节点ParallaxOcclusionMapping,可以很方便的制作出效果较好的视差效…

计算机网络之---对称加密与非对称加密

对称加密(Symmetric Encryption) 对称加密是指加密和解密使用相同的密钥。也就是说,加密数据的密钥和解密数据的密钥是相同的,因此加密和解密操作是对称的。 特点: 加密和解密使用相同的密钥。速度较快,适…

当歌 - RSS 订阅分发平台开发

以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…

深入浅出Java Web开放平台:从API设计到安全保障的全方位探索

随着互联网的快速发展,越来越多的企业开始构建开放平台,特别是在Java Web开发中,如何实现高效的开放平台接口,保障系统的安全性,并且提升开发者的体验,已经成为了很多开发者关注的热点话题。本文将深入探讨…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

青龙面板脚本开发指南:高效自动化任务的实现

青龙面板脚本开发指南:高效自动化任务的实现 青龙面板(Qinglong Panel)是一款强大的任务管理平台,支持多种语言的脚本开发和执行。通过在青龙面板中编写和管理脚本,用户可以轻松实现自动化任务,提高工作效…

学习华为熵减,激发组织活力

目录 为什么学习华为? 学习华为什么? 一、势:顺势而为,在风口上猪都会飞起来。 二、道:就是认识和利用规律层面,文化和制度创新就是企业经营之道。 三、法:就是一套价值管理的变革方法论。…

AI:对比ChatGPT这类聊天机器人,人形机器人对人类有哪些不一样的影响?

人形机器人与像ChatGPT这样的聊天机器人相比,虽然都属于人工智能技术的应用,但由于其具备的物理形态和与环境的互动能力,它们对人类的影响会有很大的不同。下面从多个角度进行对比,阐述它们各自对人类的不同影响: 1. …