Minimum Size Subarray Sum**

Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.

看着不难,但是本题的实现起来还会遇到许多的困难

方法一:两头指针,首先遍历数组找到第一个和大于等于目标值的位置,如果到最后都没找到,则返回0,如果开始结束在同一位置,则返回1,然后可得到start和结束位置。之后就是两个指针的移动问题。减去nums[start]之后,如果任大于等于s,那么start++,否则start++,end++,因为那个长度的已经有保证了。注意这里加的时候避免end越界问题。由于end到达最后任然需要继续循环,所以不能使用end作为循环结束的条件,这里使用一个变量i作为循环结束的条件。

 1 class Solution(object):
 2     def minSubArrayLen(self, s, nums):
 3         """
 4         :type s: int
 5         :type nums: List[int]
 6         :rtype: int
 7         """
 8         sum = 0
 9         length = len(nums)
10         if length == 0:
11             return 0
12         i = 0
13         for i in range(length):
14             sum += nums[i]
15             if sum >= s:
16                 break
17         else:
18             return 0
19         start = 0
20         end = i
21         while i < length:
22             if start == end:
23                 return 1
24             sum -= nums[start]
25             if sum >= s:
26                 start += 1
27             elif end < length -1:
28                 start += 1
29                 end += 1
30                 sum += nums[end]
31                 i += 1
32             else:
33                 i += 1
34         return end - start + 1
35         
View Code

相关文章:

  • 2021-10-27
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
  • 2021-09-24
  • 2021-08-30
  • 2021-12-28
猜你喜欢
  • 2021-08-31
  • 2022-12-23
  • 2021-12-12
  • 2021-08-14
  • 2021-04-26
  • 2021-10-26
  • 2022-12-23
相关资源
相似解决方案