Skip to content

Commit 3f57d21

Browse files
committed
Add problem 209 - Minimum Size Subarray Sum
1 parent 5a6d03d commit 3f57d21

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import List
2+
3+
4+
class MinimumSizeSubarraySum:
5+
@staticmethod
6+
def minSubArrayLen(target: int, nums: List[int]) -> int:
7+
# Special case
8+
if not nums:
9+
return 0
10+
# Length of list
11+
n = len(nums)
12+
# Left and right pointers of the window
13+
left, right = 0, 0
14+
# Minimum length
15+
min_length = 1 << 31 - 1
16+
# Sum of the window
17+
window_sum = 0
18+
# Process the list
19+
while right < n:
20+
window_sum += nums[right]
21+
right += 1
22+
# Squeeze the window, if possible
23+
while window_sum >= target:
24+
min_length = min(min_length, right - left)
25+
window_sum -= nums[left]
26+
left += 1
27+
return 0 if min_length == 1 << 31 - 1 else min_length
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import unittest
2+
3+
from problems.sliding_window.minimum_size_subarray_sum import MinimumSizeSubarraySum
4+
5+
6+
class TestMinimumSizeSubarraySum(unittest.TestCase):
7+
8+
def setUp(self):
9+
self.minimum_size_subarray_sum = MinimumSizeSubarraySum()
10+
11+
def test_min_sub_array_len_empty_array(self):
12+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(7, []), 0)
13+
14+
def test_min_sub_array_len_null_array(self):
15+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(7, None), 0)
16+
17+
def test_min_sub_array_len_no_subarray_exists(self):
18+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(15, [1, 2, 3, 4, 5]), 5)
19+
20+
def test_min_sub_array_len_exact_match(self):
21+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(7, [2, 3, 1, 2, 4, 3]), 2)
22+
23+
def test_min_sub_array_len_multiple_matches(self):
24+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(4, [1, 4, 4]), 1)
25+
26+
def test_min_sub_array_len_single_element(self):
27+
self.assertEqual(self.minimum_size_subarray_sum.minSubArrayLen(3, [3]), 1)
28+
29+
30+
if __name__ == '__main__':
31+
unittest.main()

0 commit comments

Comments
 (0)