解法一:枚举山顶

遍历找到同时大于其左右两侧的元素,则为山顶,向两边遍历计算出这座山脉的长度,最后统计最大值。

  1. class Solution {
  2. public int longestMountain(int[] A) {
  3. int max = 0;
  4. for (int i = 1; i < A.length - 1; ++i) {
  5. if ((A[i] > A[i - 1]) && (A[i] > A[i + 1])) {
  6. int left = i - 2;
  7. int right = i + 2;
  8. while ((left >= 0) && (A[left] < A[left + 1])) {
  9. --left;
  10. }
  11. while ((right < A.length) && (A[right] < A[right - 1])) {
  12. ++right;
  13. }
  14. max = Math.max(right - left - 1, max);
  15. }
  16. }
  17. return max;
  18. }
  19. }