leetcode 845. 数组中的最长山脉
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:
B.length >= 3
存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]
(注意:B 可以是 A 的任意子数组,包括整个数组 A。)
给出一个整数数组 A,返回最长 “山脉” 的长度。
如果不含有 “山脉” 则返回 0。
示例 1:
输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
示例 2:
输入:[2,2,2]
输出:0
解释:不含 “山脉”。
提示:
0 <= A.length <= 10000
0 <= A[i] <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-mountain-in-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1:遍历数组。
2:用一个布尔型flag来记录当前时上升(true)还是下降(false)。 用一个int count 来记录当前山峰的长度。 用一个int max 来记录最大值。
3:若是遇到递增的,若之前时递增,则count + 1.若之前是递减,则count 于max比较,并重置count。falg
4:若遇到递减,若之前是递增,则改变flag值,count + 1。若之前是递减,则count+ 1.
5:若遇到的值= 上一个值,则重置flag 和count.
public int longestMountain(int[] arr) { boolean flag = true; int count = 1; int max = 0; for (int i = arr.length - 2; i >= 0; i--) { if (arr[i] > arr[i + 1]) { if (flag) { count++; } else { max = Math.max(max, count); count = 2; flag = true; } } else if (arr[i] < arr[i + 1]) { if (flag && count == 1) { continue; } count++; flag = false; } else { if (!flag) { max = Math.max(max, count); } count = 1; flag = true; } } if (!flag) { max = Math.max(max, count); } return max; }


浙公网安备 33010602011771号