我们把数组 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

思路:

1.遍历每个点左边的坡有多高

2.遍历每个点右边的坡有多高

3. 左右加起来比最大值

提交的代码:

class Solution {
    public int longestMountain(int[] A) {
        if(A.length==0)
        {
            return 0;
        }
        int left[] = new int[A.length];
        int right[] = new int[A.length];
        int max = 0;
        for(int i=1;i<A.length;i++)
        {
            if(A[i]>A[i-1])
            {
                left[i]=left[i-1]+1;
                if(left[i-1]==0)
                {
                    left[i]++;
                }
            }
            else
            {
                left[i]=0;
            }
        }
        for(int i=A.length-2;i>=0;i--)
        {
            if(A[i+1]<A[i])
            {
                right[i]=right[i+1]+1;
                if(right[i+1]==0)
                {
                    right[i]++;
                }
            }
            else
            {
                right[i]=0;
            }
        }
        for(int i=0;i<A.length;i++)
        {
            if(left[i]!=0&&right[i]!=0)
            {
                max = Math.max(max, left[i]+right[i]);
            }
        }
        if(max==0)
        {
            return 0;
        }
        return max-1;
    }
}

完整的代码:

public class Solution845 {
public static int longestMountain(int[] A) {
        if(A.length==0)
        {
            return 0;
        }
        int left[] = new int[A.length];
        int right[] = new int[A.length];
        int max = 0;
        for(int i=1;i<A.length;i++)
        {
            if(A[i]>A[i-1])
            {
                left[i]=left[i-1]+1;
                if(left[i-1]==0)
                {
                    left[i]++;
                }
            }
            else
            {
                left[i]=0;
            }
        }
        for(int i=A.length-2;i>=0;i--)
        {
            if(A[i+1]<A[i])
            {
                right[i]=right[i+1]+1;
                if(right[i+1]==0)
                {
                    right[i]++;
                }
            }
            else
            {
                right[i]=0;
            }
        }
        for(int i=0;i<A.length;i++)
        {
            if(left[i]!=0&&right[i]!=0)
            {
                max = Math.max(max, left[i]+right[i]);
            }
            
        }
        if(max==0)
        {
            return 0;
        }
        return max-1;
    }
public static void main(String[] args)
{
    //int nums[] = {2,1,4,7,3,2,5};
    int nums[] = {0,1,0};
    System.out.println(longestMountain(nums));
}
}

Leetcode--845. 数组中的最长山脉相关推荐

  1. LeetCode 845. 数组中的最长山脉

    https://leetcode-cn.com/problems/longest-mountain-in-array/ 难度:中等   我们把数组 A 中符合下列属性的任意连续子数组 B 称为 &qu ...

  2. LeetCode 845. 数组中的最长山脉(中心扩展)

    1. 题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 ...

  3. 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)

    把符合下列属性的数组 arr 称为 山脉数组 :arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 arr[0] < arr[1 ...

  4. 845. 数组中的最长山脉

    链接:845. 数组中的最长山脉 题解: class Solution {public:int longestMountain(vector<int>& nums) {if(num ...

  5. 0数组中等 LeetCode845. 数组中的最长山脉

    845. 数组中的最长山脉 描述 把符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 ...

  6. LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉

    描述: 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B ...

  7. 力扣 数组中的最长山脉

    力扣 数组中的最长山脉 题目描述 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.le ...

  8. JAVA程序设计:数组中的最长山脉(LeetCode:845)

    我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] ...

  9. Leetcode每日一题:845.longest-mountain-in-array(数组中的最长山脉)

    思路:这道题可以设两个标志位up 和 down,分别表示上山状态和经过上山后的下山状态,所以会遇到以下几种情况,分情况处理即可: 1.遇到上坡: 下山状态down==true遇到上坡,说明前一个山脉已 ...

最新文章

  1. 图像二值形态学——腐蚀和膨胀的C语言实现
  2. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
  3. shadow dom一个最简单的例子
  4. 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
  5. 技术面试官的一些建议
  6. 【POJ - 1836】Alignment(dp,LIS,最长上升子序列类问题)
  7. 360浏览器清除缓存_手机微信内置浏览器缓存清理指南
  8. Selenium系列文章汇总
  9. 你看得懂的海明码校验和纠错原理
  10. 在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)
  11. 加载PageOffice控件失败。 当前浏览器是42版本以上的谷歌浏览器,建议采用POBrowser技术打开PageOffice即可。
  12. acm之奇葩数据输入专题
  13. Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
  14. 主机甲和主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧......[数据传输率]错题总结
  15. Altium Designer绘制stm32最小系统原理图
  16. CATIA二次开发-装配技术
  17. WebScoket 实例 简单的网页聊天室
  18. qlikview连接mysql_QlikView安装
  19. 使用在线链接阿里图标库(iconfont)(vue)
  20. 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在

热门文章

  1. LeetCode 1295. 统计位数为偶数的数字
  2. LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
  3. 机器学习简介及学习思维导图
  4. os、os.path、shutil操作文件和文件路径的常用方法总结
  5. 利用python创建学生管理系统软件代码赏析
  6. 简单循迹小车实验心得_红外自动循迹小车实验报告
  7. python数据分析与机器学习(Numpy,Pandas,Matplotlib)
  8. Android官方开发文档Training系列课程中文版:通知用户之大视图通知
  9. Java总结:正则表达式
  10. python enumerate用法总结(转)