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

长度最小的子数组(leetcode)

难度:中等

题目描述

给定一个含有 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

思路

这道题是一个很经典的滑动窗口问题,设置两个指针一个left一个right,将它们都初始化为0。之后先让左边界不变,移动右边界到滑动窗口框出来的所有数的和更好大于等于目标值,此时计算出当前滑动窗口长度并和最小值比较,若小于则替换最小值,之后滑动窗口的左边界向前进一步,同时当前滑动窗口的值要剪掉刚刚的左边界(因为进了一步,删掉了前一步的左边界)。最后一定一定不要忘记,不能直接输出当前最小值m,如果没有满足要求的值,此时的最小值依然为我们最开始初始化的最大值INT_MAX,因此要判断一下最小值是否为初始化的值,是则输出0表示没有满足要求的子数组,不是则输出当前最小值。

代码

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0,right=0;int m=INT_MAX;int sum=0;int n=nums.size();if(n==0) return 0;while(right<n){sum=sum+nums[right];while(sum>=target){m=min(m,right-left+1);sum=sum-nums[left];left++;}right++;}if(m==INT_MAX) return 0;else return m;}
};

时间复杂度

  • 时间复杂度:O(n)。n为数组长度。

  • 空间复杂度:O(1)。只需常数空间存放若干变量。

相关文章:

  • 联想混合式AI的“动力总成”构建记
  • 【Redis 进阶】哨兵模式
  • KUKA机器人中断编程2—中断相关的指令
  • JDK 安装与配置
  • cursor Too many报错 显示锁机器码怎么办?也就是Cursor的
  • 配置集群(yarn)
  • 医药级食品树脂杜笙树脂医药溶液去除苦味溶液净化
  • 未来技术展望:光子量子计算集成与连续变量可视化
  • CATIA高效工作指南——常规配置篇(二)
  • Kotlin与Qt跨平台框架深度解析:业务逻辑共享与多语言集成
  • 51 单片机头文件 reg51.h 和 reg52.h 详解
  • C++编程练习,认识面向对象权限,如何进行封装
  • 深度解析mybatisplus中出现的循环依赖问题
  • (自用)Java学习-5.9(Thymeleaf,自动装配,自定义启动器 )
  • 旋转图像算法讲解
  • YOLOv8网络结构
  • 判断一个数是不是素数的最高效的算法
  • HTML简单语法标签(后续实操:云备份项目)
  • Vue3的命名规范
  • Python60日基础学习打卡D12【虫豸版】
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额5万元
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 马上评丨未成年人“擦边”短视频岂能成流量密码
  • 社恐也能嗨起来,《孤独摇滚》千人观影齐舞荧光棒
  • 中美经贸高层会谈11日在日内瓦将继续进行
  • 东方红资管官宣:41岁原国信资管董事长成飞出任新总经理