zoukankan      html  css  js  c++  java
  • LeetCode 845. 数组中的最长山脉

    题目链接

    845. 数组中的最长山脉 Medium

    题目分析

    这个题的难度纯粹就是吓唬人的。。这个题的思路有很多,可以先找山峰,然后再向左右扩展。我的想法就是在遍历过程中去维护一个双指针,双指针的距离就是当前山脉的长度。
    遍历过程中分以下几种情况

    • 如果A[i] > A[i-1],那么这里可以看做山脉的起点,同时设置一个标志位flag来标记
    • 如果A[i] < A[i-1],那么这里可以看做山脉的下坡,我们内部再使用一个循环去寻找山脉的结束点。在寻找结束后,通过判断flag && fast - slow >= 3的条件,来进行res的计算。
    • 如果A[i] == A[i-1],这里没啥好说的,相同的元素,直接重置slowflag,然后让fast指向下一个元素即可。

    代码实现

    class Solution {
        public int longestMountain(int[] A) {
            int res = 0;
            int fast = 1;
            int slow = 0;
            boolean flag = false;
            while(fast < A.length){
                if(A[fast] > A[fast - 1]){
                    fast++;
                    flag = true;
                }else if(A[fast] < A[fast - 1]){
                    while(fast < A.length && A[fast] < A[fast - 1]){
                        fast++;
                    }
                    if(flag && fast - slow >= 3){
                        res = Math.max(res, fast - slow);
                    }
                    slow = fast - 1;
                    flag = false;
                }else{
                    slow = fast;
                    fast++;
                    flag = false;
                }
            }
            return res;
        }
    }
    

    总结

    有时候不要被题目的难度吓到自己了。

  • 相关阅读:
    MySQL:逻辑库与表管理
    MySQL:初识数据库
    MySQL:安装与配置
    C语言之指针
    C语言之二维数组
    C语言之冒泡排序
    C语言之数组
    C语言之函数的声明
    C语言之带有返回值的函数
    C语言之全局变量和局部变量
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13872305.html
Copyright © 2011-2022 走看看