개발/알고리즘
[LeetCode | Python] 209. Minimum Size Subarray Sum
Grara
2025. 4. 26. 21:34
느낀점
슬라이딩 윈도우에서는 왼쪽, 오른쪽 인덱스를 잘 구분한 후 오른쪽 인덱스는 선행이니 왼쪽 부분만 조율하면 된다.
문제
https://leetcode.com/problems/minimum-size-subarray-sum/description/?source=submission-noac
리스트에서 타겟을 넘는 서브배열들을 확인하고, 그 중 가장 짧은 길이를 반환하는 문제이다.
풀이
두 개의 포인터를 기준으로 오른쪽은 그대로 가고, 타겟을 넘어갔는지 안 넘어갔는지만 판단하여 왼쪽 인덱스를 조율한다. 전형적인 슬라이딩 윈도우 문제.
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
min_len = float('inf')
p1 = 0
sum_cnt = 0
for p2 in range(len(nums)):
sum_cnt += nums[p2]
while sum_cnt >= target:
min_len = min(p2-p1+1, min_len)
sum_cnt -= nums[p1]
p1 += 1
return min_len if min_len != float('inf') else 0
결과
- 공간복잡도: $$ O(N) $$
- 시간복잡도: $$ O(1) $$