🔒Algorithm

LeetCode [JS] > 1004. Max Consecutive Ones III

devWarrior 2025. 5. 5. 20:14

📌문제링크

https://leetcode.com/problems/max-consecutive-ones-iii/description/?envType=study-plan-v2&envId=leetcode-75

📌문제풀이

이 문제는 sliding window로 접근해서 풀면된다. 시간 복잡도는 O(n) 이며 right를 1씩 증가하면서 zeroCnt 가 > k 이면 zeroCnt가 k를 넘지 않을때까지 left를 이동한뒤 right-left+1을 이용하여 1의 갯수를 구할 수 있다. 

// time complexity O(n)
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var longestOnes = function (nums, k) {
    let left = 0;
    let zeroCnt = 0;
    let max = 0;
    for (let right = 0; right < nums.length; ++right) {
        if (nums[right] === 0) {
            ++zeroCnt;
        }

        if (zeroCnt > k) {
            while (nums[left] !== 0) {
                ++left;
            }
            ++left;
            --zeroCnt;
        }

        let cnt = right - left + 1;
        max = Math.max(cnt, max);
    }
    return max;
};