LeetCode in Kotlin

3350. Adjacent Increasing Subarrays Detection II

Medium

Given an array nums of n integers, your task is to find the maximum value of k for which there exist two adjacent subarrays of length k each, such that both subarrays are strictly increasing. Specifically, check if there are two subarrays of length k starting at indices a and b (a < b), where:

Return the maximum possible value of k.

A subarray is a contiguous non-empty sequence of elements within an array.

Example 1:

Input: nums = [2,5,7,8,9,2,3,4,3,1]

Output: 3

Explanation:

Example 2:

Input: nums = [1,2,3,4,4,4,4,5,6,7]

Output: 2

Explanation:

Constraints:

Solution

import kotlin.math.max
import kotlin.math.min

class Solution {
    fun maxIncreasingSubarrays(nums: List<Int>): Int {
        val n = nums.size
        val a = IntArray(n)
        for (i in 0..<n) {
            a[i] = nums[i]
        }
        var ans = 1
        var previousLen = Int.Companion.MAX_VALUE
        var i = 0
        while (i < n) {
            var j = i + 1
            while (j < n && a[j - 1] < a[j]) {
                ++j
            }
            val len = j - i
            ans = max(ans, (len / 2))
            if (previousLen != Int.Companion.MAX_VALUE) {
                ans = max(ans, min(previousLen, len))
            }
            previousLen = len
            i = j
        }
        return ans
    }
}