845. 数组中的最长山脉

把符合下列属性的数组 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 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-mountain-in-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int longestMountain(int[] arr) {
        if (arr == null || arr.length < 3) {
            return 0;
        }
        int ans = 0;

        boolean up = true;
        int left = 1, right = 0;
        for (int i = 1; i < arr.length; ++i) {
            if (up) {
                if (arr[i] > arr[i - 1]) {
                    left++;
                } else {
                    if (arr[i] == arr[i - 1]) {
                        left = 1;
                    } else {
                        up = false;
                        right = 1;
                    }
                }
            } else {
                if (arr[i] < arr[i - 1]) {
                    right++;
                } else {
                    if (arr[i] == arr[i - 1]) {
                        left = 1;
                    } else {
                        up = true;
                        left = 2;
                    }
                    right = 0;
                }
            }
            if (left >= 2 && right >= 1) {
                ans = Math.max(ans, left + right);
            }
        }

        return ans;
    }
}
posted @ 2022-01-12 14:14  Tianyiya  阅读(69)  评论(0)    收藏  举报