209. Minimum Size Subarray Sum, 자바 풀이

이원석·2023년 8월 31일

Leetcode

목록 보기
3/22

[문제]
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.

https://leetcode.com/problems/minimum-size-subarray-sum/


class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        
        int l = 0;
        int r = 0;
        int sum = nums[l];
        int min_val = Integer.MAX_VALUE;

        while(l <= r && r < nums.length) {
            if (sum < target) {
                if (r == nums.length - 1) {
                    break;
                }
                sum += nums[++r];
            } else {
                min_val = Math.min(min_val, r - l + 1);
                sum -= nums[l++];
            }
        }

        if (min_val == Integer.MAX_VALUE) {
            return 0;
        } else {
            return min_val;
        }
    }
}

// 10,000,000,000

//         v v
// 2 3 1 2 3 3

// 합이 같으면 right를 증가시켜
// 합이 크면 left를 증가시켜
// 합이 작으면 right를 증가시켜

배열 요소들의 합이 target 값과 일치하는 연속된 요소들의 합의 최소길이를 구하는 문제이며, 투 포인터 유형으로 해결할 수 있었다.

0 번째 인덱스를 초기값으로 두고, 조건에 따라 l,r 포인터를 이동시킨다.
요소들의 합이 target값 보다 작다면, r 포인트를 우측으로 이동시킨뒤 총합을 증가시킨다.
요소들의 합이 target값 보다 크다면, 현재 l 인덱스 값을 총합에서 감소시키고 l 포인트를 우측으로 이동시킨다.

만약, 요소들의 총합이 target 값 보다 작은데 r 포인터가 배열의 마지막에 위치한다면 더 이상 총합의 값을 증가시킬 수 없으므로 탐색을 종료한다.

0개의 댓글