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

LeetCode.209.长度最小的子数组

题目描述:

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 

子数组

 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0

输入输出实例:

思路:首先介绍一个暴力解法(时间复杂度较高没有通过),我们使用length和start两个变量用来表示子数组长度和起始下标,然后我们慢慢增加length长度和start,直到找到满足sum(nums[start:start + length]) >= target这一条件我们return length 。循环结束后我们return 0。但是这个方法时间复杂度较高,我们进行优化。

class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:length = 1start = 0while length <= len(nums):while start + length <= len(nums):if sum(nums[start:start + length]) >= target :return lengthstart += 1start = 0length += 1return 0

优化后:使用滑动窗口, left和right为我们的左右区间,current_sum为该区间的值的总和,我们先从下标为0的值开始加,right往后走,直到区间的总和>=target,这时我们再对左侧进行删减以减少区间长度,left往后移,最小长度我们使用min_length = min(min_length,right - left + 1)实现,当前长度与原来最小长度取最小值。这样最后我们left和right围成的区间是满足条件的且长度最小的,由于我们刚开始min_length设置一个很大的值,如果最后依旧是这个值说明我们没有找到满足条件的区间return 0,否则return min_length

class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:n = len(nums)current_sum = 0left = 0min_length = float('inf')for right in range(n):current_sum += nums[right]while current_sum >= target :min_length = min(min_length,right - left + 1)current_sum -= nums[left]left += 1return min_length if min_length != float('inf') else 0

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败
  • 生信分析:精准科研的幕后英雄,加速生物医学研究新进程
  • 其他自动重试的注解
  • 洛谷P1198.最大数
  • Voice agent connected!回顾一场 24 小时的黑客松
  • Cocos Creator通用关卡编辑器UniLevelEditor
  • AcWing-算法提高课(第一章)-下
  • 【经典算法】BFS_最短路问题
  • Linux文件属性和打包压缩详解
  • 模拟笔试:卡码网2023年快手笔试真题
  • 分组循环算法
  • 网络编程TCP与UDP
  • 备战秋招60天算法挑战,Day22
  • I2C通信协议(软件I2C和硬件I2C)
  • 博客园-awescnb插件-geek皮肤优化--公众号卡片
  • C++类中的特殊成员函数
  • interface和setter,getter
  • node 版本过低
  • Odoo domain写法及运用
  • QQ浏览器x5内核的兼容性问题
  • Vue2 SSR 的优化之旅
  • Vue小说阅读器(仿追书神器)
  • 阿里云前端周刊 - 第 26 期
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 编写符合Python风格的对象
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 订阅Forge Viewer所有的事件
  • 讲清楚之javascript作用域
  • 实现菜单下拉伸展折叠效果demo
  • 我是如何设计 Upload 上传组件的
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #java学习笔记(面向对象)----(未完结)
  • (2)nginx 安装、启停
  • (C11) 泛型表达式
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (办公)springboot配置aop处理请求.
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三)elasticsearch 源码之启动流程分析
  • (三)Honghu Cloud云架构一定时调度平台
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四) Graphivz 颜色选择
  • (算法)求1到1亿间的质数或素数
  • (已解决)什么是vue导航守卫
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net Core和.Net Standard直观理解
  • .Net IOC框架入门之一 Unity
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET基础篇——反射的奥妙
  • /tmp目录下出现system-private文件夹解决方法