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] <= 109class Solution {
public int maxIncreasingSubarrays(List<Integer> nums) {
int n = nums.size(), prev = 0, curr = 1, ans = 0;
for (int i = 1; i < n; i++) {
if (nums.get(i) > nums.get(i - 1)) // incr curr streak
curr++;
else { // reset streak after recording stats
ans = Math.max(ans, Math.min(prev, curr)); // <-|-> Take only valid prev & curr window
ans = Math.max(ans, prev / 2); // also consider that prev window could be split into 2 adj ones
prev = curr;
curr = 1;
}
}
ans = Math.max(ans, Math.min(prev, curr)); // account for last running streaks (curr & prev)
ans = Math.max(ans, Math.max(prev, curr) / 2); // account for split of last running streaks
return ans;
}
}