어제는 길이 k 를 만족하는 두 인접한 하위배열을 찾는 문제였다면, 오늘은 배열을 주고 인접한 하위배열끼리의 increasing 을 비교해서 최댓값 k 를 찾는 문제.
우선 원본배열 nums 를 돌면서 increasing 이 끝날 때 마다 길이를 arr 라는 새로운 배열에 넣는다. 그리고 이후 arr 을 한번 더 돌면서 Math.min(arr[i], arr[i + 1]) 을 통해서 인접한 두 하위배열의 공통길이 maxAdjacent 를 찾아낸다. 원본배열의 마지막 원소가 increasing인 경우를 대비해 배열을 끝까지 돈 후 남아있는 curLength를 arr 에 넣고 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)
};
