-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLeetcode Problem 209 Minimum Size Subarrary Sum.txt
67 lines (47 loc) · 1.77 KB
/
Leetcode Problem 209 Minimum Size Subarrary Sum.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Given an array of positive integers nums and a positive integer target, return the minimal length of a
subarray
whose sum is greater than or equal to target. If there is no such subarray, return 0 instead.
Example 1:
Input: target = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: The subarray [4,3] has the minimal length under the problem constraint.
Example 2:
Input: target = 4, nums = [1,4,4]
Output: 1
Example 3:
Input: target = 11, nums = [1,1,1,1,1,1,1,1]
Output: 0
Constraints:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
Follow up: If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log(n)).
Hint:
Use sliding window
Initialize max subarray size equal to size of the nums
Edge: If total sum is less than target then there is no subarrary that is possible
Start Iterating and calculating current sum
This is our rightPTR
While sum becomes greater or equal to the target
Update the sum by removing the left element
calculate min window size by rightptr-leftprt + 1
move leftprt by one
Return the minWindow
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
leftIndex = 0
rightIndex = 0
windowSum = 0
minWindow = len(nums)
if sum(nums) < target:
return 0
for i in range(len(nums)):
windowSum += nums[i]
rightIndex = i
while windowSum >= target:
windowSum -= nums[leftIndex]
print(f"l={leftIndex} r={rightIndex} sum={windowSum}")
minWindow = min(minWindow, (rightIndex-leftIndex)+1)
leftIndex += 1
print(f"minWindow={minWindow}")
return minWindow