当前位置:   article > 正文

【刷题】长度最小的子数组

【刷题】长度最小的子数组

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

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

题目分析:采用的滑动窗口,及快慢指针的方法

先不断累加,如果大于目标值时,移动慢指针,减少值看是否还能大于目标值,依次比较,每次将最短的存下,最终输出最短的值。

  1. class Solution:
  2. def minSubArrayLen(self, target: int, nums: List[int]) -> int:
  3. #快慢指针,滑动窗口
  4. start,end=0,0
  5. total=0
  6. n=len(nums)
  7. ans=n+1
  8. while end<n:
  9. total+=nums[end]
  10. while total>=target:
  11. ans=min(ans,end-start+1)
  12. total-=nums[start]
  13. start+=1
  14. end+=1
  15. return 0 if ans==n+1 else ans

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号