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:
nums[a..a + k - 1] and nums[b..b + k - 1] are strictly increasing.b = a + k.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:
[7, 8, 9], which is strictly increasing.[2, 3, 4], which is also strictly increasing.k for which two such adjacent strictly increasing subarrays exist.Example 2:
Input: nums = [1,2,3,4,4,4,4,5,6,7]
Output: 2
Explanation:
[1, 2], which is strictly increasing.[3, 4], which is also strictly increasing.k for which two such adjacent strictly increasing subarrays exist.Constraints:
2 <= nums.length <= 2 * 105-109 <= nums[i] <= 109import 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
}
}