把符合下列属性的数组 arr
称为 山脉数组 :
arr.length >= 3
- 存在下标
i
(0 < i < arr.length - 1
),满足arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
给出一个整数数组 arr
,返回最长山脉子数组的长度。如果不存在山脉子数组,返回 0
。
输入: arr = [2,1,4,7,3,2,5] 输出: 5 解释: 最长的山脉子数组是 [1,4,7,3,2],长度为 5。
输入: arr = [2,2,2] 输出: 0 解释: 不存在山脉子数组。
1 <= arr.length <= 104
0 <= arr[i] <= 104
- 你可以仅用一趟扫描解决此问题吗?
- 你可以用
O(1)
空间解决此问题吗?
impl Solution {
pub fn longest_mountain(arr: Vec<i32>) -> i32 {
let mut upcount = 0;
let mut downcount = 0;
let mut ret = 0;
for i in 1..arr.len() {
if arr[i] == arr[i - 1] {
upcount = 0;
downcount = 0;
} else if arr[i] > arr[i - 1] && i > 1 && arr[i - 1] < arr[i - 2] {
upcount = 1;
downcount = 0;
} else if arr[i] > arr[i - 1] {
upcount += 1;
} else {
downcount += 1;
}
if upcount > 0 && downcount > 0 {
ret = ret.max(upcount + downcount + 1);
}
}
ret
}
}