题目:
我们把数组 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。
    示例:

    提示:
    方法一:枚举山顶
    对于一座「山脉」,我们称首元素 B[0] 和尾元素 [len(B)−1] 为「山脚」,满足题目要求 B[i−1]<B[i]>B[i+1] 的元素 B[i] 为「山顶」。为了找出数组 AA 中最长的山脉,我们可以考虑枚举山顶,再从山顶向左右两侧扩展找到山脚。
class Solution {public int longestMountain(int[] A) {int n = A.length;int[] left = new int[n]; // 左边有几个连续递减的数int[] right = new int[n]; // 右边有几个连续递减的数for (int i = 1; i < n; i++) {if (A[i] > A[i - 1]) {left[i] = left[i - 1] + 1;}}for (int i = n - 2; i > -1; i--) {if (A[i] > A[i + 1]) {right[i] = right[i + 1] + 1;}}int ans = 0;for (int i = 1; i < n - 1; i++) {if (left[i] > 0 && right[i] > 0) {ans = Math.max(ans, left[i] + right[i] + 1);}}return ans;}
}

方法二:枚举山脚
思路与算法
我们也可以枚举山脚。例如当我们从左向右遍历整个数组 AA 时,可以使用双指针的方法,一个指针枚举左侧山脚,另一个指针不断向右移动到右侧山脚

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

LeetCode之数组中的最长山脉相关推荐

  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. LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉

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

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

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

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

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

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

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

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

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

  9. Leetcode--845. 数组中的最长山脉

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

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

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

最新文章

  1. c语言文件 写入 换行,关于文件操作,碰到空格就换行
  2. 漫画:什么是 “代理模式” ?
  3. reduce 轻松将cookie转化为对象
  4. 求解出n以内所有能被5整除的正整数的乘积_所有最常见最经典的算法题都在这里了...
  5. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
  6. 零基础学习Java-素数和
  7. (案例五)将数据保存在MongoDB中
  8. 为什么需要分布式配置中心
  9. Matlab画图常用命令
  10. ASO优化如何不花钱也能上榜
  11. SPI驱动之南瑞NRSEC3000加密芯片驱动开发总结
  12. 解耦——Hybrid H5跨平台性思考
  13. 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc
  14. win10如何修改dns服务器地址,win10如何修改dns服务器地址
  15. Python正则(粗略)
  16. 【U3D小游戏】愤怒的小鸟(三)猪的相关
  17. LInux:进程等待之wait() waitpid()
  18. 日常英文缩写以及杂记
  19. sql server 获取当前日期所在得周一和周日
  20. CentOS 7下ngrok服务器搭建

热门文章

  1. 在html上运行asp,ASP在网页设计的作用
  2. LQR,iLQR,DDP控制论经典算法(MBRL基础知识)
  3. sierpinski三角形的维数_神奇的分形艺术(二):Sierpinski三角形
  4. 设计模式 - 桥接模式 ( Bridge ) 平时用的少
  5. Anaconda2020安装与使用
  6. 通信服务器的作用是什么意思,通讯管理机是什么 通讯管理机的作用功能及特点...
  7. 东方联盟创始人郭盛华:互联网守护神的传奇故事
  8. 产品静电ESD测试标准
  9. 计算机课第一节可以讲些什么,高职《大学计算机基础》第1节课讲点什么?
  10. Python实现一键翻译英文论文,实现了pdf文档英译汉,pdf格式不变