impl Solution {
pub fn longest_subarray(nums: Vec<i32>) -> i32 {
let max =
nums.iter().copied().
fold(i32::MIN, |acc, num| acc.max(num));
let (mut left, mut right) = (usize::MAX, usize::MAX);
let (mut found, mut result) = (false, 0);
for (i, num) in nums.iter().copied().enumerate() {
match (num == max, found) {
(true, false) => (left, right, found) = (i, i, true),
(true, true) => right += 1,
(false, _) => (left, right, found) = (usize::MAX, usize::MAX, false)
}
if left != usize::MAX {
result = result.max(right - left + 1);
}
}
result as i32
}
}