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

leetcode做题笔记209. 长度最小的子数组

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

思路一:滑动窗口

c++解法

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

分析:

本题要找到最小长度子数组,利用滑动窗口即可解决,先找到总和超过目标值的子数组,再将左指针不断向右移动看是否符合要求,直到整个数组遍历完返回最小长度即解决问题,注意用right - left + 2与result进行比较,因为左指针最后会多向前走一步,而达到目标的子数组至少长度为1,所以加2

总结:

本题考察对滑动窗口的运用,利用左右两个指针确定子数组的边界再比较得最小长度,时间复杂度为O(n)

 

http://www.lryc.cn/news/215850.html

相关文章:

  • 【机器学习】几种常用的机器学习调参方法
  • 使用免费 FlaskAPI 部署 YOLOv8
  • 不使用屏幕在树莓派4B安装Ubuntu22.04桌面版(64位)
  • Pymysql模块使用操作
  • 8+双疾病+WGCNA+多机器学习筛选疾病的共同靶点并验证表达
  • springboot如何获取前端请求头的值并加入ThreadLocal
  • 程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!
  • 前端食堂技术周刊第 102 期:Next.js 14、Yarn 4.0、State of HTML、SEO 从 0 到 1
  • GPT与人类共生:解析AI助手的兴起
  • HTML脚本、字符实体、URL
  • UOS安装Jenkins
  • 纯CSS实现卡片上绘制透明圆孔
  • 用前端框架Bootstrap的AdminLTE模板和Django实现后台首页的页面
  • Linux驱动 编译乱序和执行乱序
  • 京东大数据平台(京东数据分析):9月京东牛奶乳品排行榜
  • Hadoop RPC简介
  • 你没有见过的 git log 风格
  • 轻松搭建个人邮件服务器:实现远程发送邮件的hMailServer配置
  • 刷题笔记day08-字符串01
  • Pure-Pursuit 跟踪双移线 Gazebo 仿真
  • Selenium学习(Java + Edge)
  • 项目管理-组织战略类型和层次讲解
  • 面试算法50:向下的路径节点值之和
  • dbeaver查看表,解决证书报错current license is non-compliant for [jdbc]
  • 网络安全进阶学习第二十一课——XXE
  • 如何将 ruby 打包类似于jdk在另一台相同架构的机器上面开箱即用
  • vue封装独立组件:实现分格密码输入框/验证码输入框
  • 从2D圆形到3D椭圆
  • Linux CentOS7.9安装OpenJDK17
  • 计算机网络第4章-网络层(1)