[Leetcode] 3350. Adjacent Increasing Subarrays Detection II

RexiaN·2025년 10월 15일

어제는 길이 k 를 만족하는 두 인접한 하위배열을 찾는 문제였다면, 오늘은 배열을 주고 인접한 하위배열끼리의 increasing 을 비교해서 최댓값 k 를 찾는 문제.

우선 원본배열 nums 를 돌면서 increasing 이 끝날 때 마다 길이를 arr 라는 새로운 배열에 넣는다. 그리고 이후 arr 을 한번 더 돌면서 Math.min(arr[i], arr[i + 1]) 을 통해서 인접한 두 하위배열의 공통길이 maxAdjacent 를 찾아낸다. 원본배열의 마지막 원소가 increasing인 경우를 대비해 배열을 끝까지 돈 후 남아있는 curLengtharr 에 넣고 maxValue 와 비교하는 걸 잊지 말자.

생각해야 할 부분이 하나 있는데, 하나의 하위배열은 다시 다른 두 하위배열의 조합이 될 수 있다는 점이다. 여기서는 최대길이만 찾으면 되므로 하위배열 중 가장 길이가 긴 값을 maxValue 에 저장해두고 위에서 찾아낸 maxAdjacent 와 비교해 큰 값을 반환하면 된다.

function maxIncreasingSubarrays(nums: number[]): number {
    const arr = []
    let maxValue = -1000000000
    let maxAdjacent = -1000000000

    let index = 0
    let curLength = 1

    while(index <= nums.length - 2) {
        if (nums[index + 1] > nums[index]) {
            curLength += 1
        } else {
            arr.push(curLength)
            maxValue = Math.max(maxValue, curLength)

            curLength = 1
        }

        index += 1
    }

    maxValue = Math.max(maxValue, curLength)
    arr.push(curLength)

    index = 0

    while(index <= arr.length - 2) {
        maxAdjacent = Math.max(maxAdjacent, Math.min(arr[index], arr[index + 1]))
        index += 1
    }

    return Math.max(Math.floor(maxValue / 2), maxAdjacent)
};

profile
Don't forget Rule No.1

0개의 댓글