# 03.02.2025 [3105. Longest Strictly Increasing or Strictly Decreasing Subarray]
Longest strict monotonic subarray #easy
03.02.2025
3105. Longest Strictly Increasing or Strictly Decreasing Subarray easy blog post substack youtube
Join me on Telegram
Problem TLDR
Longest strict monotonic subarray #easy
Intuition
Don't forget we can use brute force when the problem size is small. Sometimes that code can be easy to write and check.
Approach
the optimal solution is not that different from the brute force: drop the counter to 1
Complexity
Time complexity: O(n), O(n^2) for the brute-force
Space complexity: O(1)
Code
fun longestMonotonicSubarray(nums: IntArray) =
nums.indices.maxOf { i ->
var a = i + 1; var b = a
while (a < nums.size && nums[a - 1] > nums[a]) a++
while (b < nums.size && nums[b - 1] < nums[b]) b++
max(b - i, a - i) }
pub fn longest_monotonic_subarray(nums: Vec<i32>) -> i32 {
nums.chunk_by(|a, b| a > b).chain(nums.chunk_by(|a, b| a < b))
.map(|c| c.len() as _).max().unwrap_or(1)
}
int longestMonotonicSubarray(vector<int>& n) {
int a = 1, b = 1, r = 1;
for (int i = 1; i < size(n); ++i)
r = max({r, n[i] > n[i - 1] ? ++a : (a = 1),
n[i] < n[i - 1] ? ++b : (b = 1)});
return r;
}