首页 > 编程语言 > 详细

**209. Minimum Size Subarray Sum 长度最小的子数组

时间:2019-05-01 22:02:18      阅读:193      评论:0      收藏:0      [点我收藏+]

1. 题目描述

 

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

 

示例: 

 

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

 

2. 思路

双指针法。i和j指针分别是连续数组的两端。如果这个数组的值大于等于s则左指针+1,否则右指针+1。

 

3. 解法

 1 class Solution:
 2     def minSubArrayLen(self, s: int, nums) -> int:
 3         if sum(nums)<s:return 0      # 如果所有数的和都比s小,那就说明无解
 4         i,j=0,-1    # 左右指针,因为我们取左闭又闭区间,所以j初始为-1
 5         res = len(nums)   # 初始结果为所有数组的长度
 6         sums = 0     # 子数组的和
 7         
 8         while(i<len(nums)):      
 9             if (j+1)<len(nums)and(sums<s):     # 注意下面有nums[j+1],所以要加入越界判断
10                 j+=1
11                 sums+=nums[j]     
12             else:                               # 和已经大于s了,那么就将i右移下
13                 sums-=nums[i]
14                 i+=1 
15             if sums>=s:                         # 比较看看是否有更好的解
16                 res = min(res,j-i+1)
17         return res

 




**209. Minimum Size Subarray Sum 长度最小的子数组

原文:https://www.cnblogs.com/king-lps/p/10800896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!