java算法-枚举法--------don‘t give up

《重启22》

枚举法-寻找最长山脉

题目

示例 1:

输入:arr = [2,1,4,7,3,2,5]
输出:5
解释:最长的山脉子数组是 [1,4,7,3,2],长度为 5。
示例 2:

输入:arr = [2,2,2]
输出:0
解释:不存在山脉子数组。

来源:力扣(LeetCode)

具体代码(带注解)

/**
 * @Author: czzf
 * @Description: TODO
 * @DateTime: 2022/9/5 9:31
 **/
/*----寻找最长山脉--------*/
public class 寻找最长山脉 {
    public static int longestMountain(int[] arr) {
        int ans = 0, l = 0, n = arr.length;
        while (l < n - 1) {
            //先找到起点的最低点l(如果是前面大于后面就往前跳)
            while (l < n - 1 && arr[l] >= arr[l + 1]) {
                l++;
            }
            //设立起点
            int r = l;
            //找到第一个下降的转折点(山顶)(如果前面小于后面这时就是没到顶往前跳)
            while (r < n - 1 && arr[r] < arr[r + 1]) {
                r++;
            }
            //这个是顶点位置
            int mid = r;
            //在判断一次是否是顶点然后顶点后面还有数字,如果没有就没有意义比如情况是:9 8 7 6 7
            if (r < n - 1 && arr[r] > arr[r + 1]) {
                //此时找到的r确实是真正的山顶左右都有开始找右边有多长:
                while (r < n - 1 && arr[r] > arr[r + 1]) {
                    r++;
                }
                ans = Math.max(ans, r - l + 1);
            }
            //继续对上位置,然后遍历下去
            l = r;
        }
        return ans;
    }

    public static void main(String[] args) {
   //     System.out.println(longestMountain(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}));
    //    System.out.println(longestMountain(new int[]{0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0}));
    //    System.out.println(longestMountain(new int[]{9,8,7,6,7 ,8 ,7}));
        System.out.println(longestMountain(new int[]{8, 8 ,8, 9, 9 ,9}));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值