[30일차] Sliding Window 2

저요·2022년 10월 21일

2022 100th day challenge

목록 보기
30/97

문제

Sliding Window - minSubArrayLen

Write a function called minSubArrayLen which accepts two parameters - an array of positive integers and a positive integer.
This function should return the minimal length of a contiguous subarray of which the sum is greater than or equal to the integer passed to the function. If there isn't one, return 0 instead.

Examples

minSubArrayLen([2,3,1,2,4,3], 7) // 2 -> because [4,3] is the smallest subarray
minSubArrayLen([2,1,6,5,4], 9) // 2 -> because [5,4] is the smallest subarray
minSubArrayLen([3,1,7,11,2,9,8,21,62,33,19], 52) // 1 -> because [62] is greater than 52
minSubArrayLen([1,4,16,22,5,7,8,9,10],39) // 3
minSubArrayLen([1,4,16,22,5,7,8,9,10],55) // 5
minSubArrayLen([4, 3, 3, 8, 1, 2, 3], 11) // 2
minSubArrayLen([1,4,16,22,5,7,8,9,10],95) // 0

Time Complexity - O(n)
Space Complexity - O(1)

해결책

function minSubArrayLen(arr, val){
    //크거나 같으면 왼쪽이동
    //작으면 오른쪽이동 
    var sumVal = arr[0];
    var left = 0; 
    var right = 0; 
    var minLen = Infinity;
    
    for(let i = 0; right < arr.length; i++){
        if(sumVal >= val){
            sumVal -= arr[left];
            minLen = Math.min(minLen, right - left + 1);
            left++;
        }else{
            right++;
            sumVal += arr[right];
        }
    }
    
    return minLen !== Infinity ? minLen : 0; 
}

출처

https://www.udemy.com/share/105zfq3@c0G-Q7UBfQluzaT4C7ahY69USRlBRjEZkhvnHVRzifrw-FEVt2Vnc_pA1VjWUbtn3w==/

profile
웹개발

0개의 댓글