LeetCode之数组中的最长山脉
题目:
我们把数组 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之数组中的最长山脉相关推荐
- LeetCode 845. 数组中的最长山脉
https://leetcode-cn.com/problems/longest-mountain-in-array/ 难度:中等 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 &qu ...
- LeetCode 845. 数组中的最长山脉(中心扩展)
1. 题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 ...
- 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
把符合下列属性的数组 arr 称为 山脉数组 :arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 arr[0] < arr[1 ...
- LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉
描述: 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B ...
- 力扣 数组中的最长山脉
力扣 数组中的最长山脉 题目描述 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.le ...
- 845. 数组中的最长山脉
链接:845. 数组中的最长山脉 题解: class Solution {public:int longestMountain(vector<int>& nums) {if(num ...
- 0数组中等 LeetCode845. 数组中的最长山脉
845. 数组中的最长山脉 描述 把符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 ...
- JAVA程序设计:数组中的最长山脉(LeetCode:845)
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] ...
- Leetcode--845. 数组中的最长山脉
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] ...
- Leetcode每日一题:845.longest-mountain-in-array(数组中的最长山脉)
思路:这道题可以设两个标志位up 和 down,分别表示上山状态和经过上山后的下山状态,所以会遇到以下几种情况,分情况处理即可: 1.遇到上坡: 下山状态down==true遇到上坡,说明前一个山脉已 ...
最新文章
- c语言文件 写入 换行,关于文件操作,碰到空格就换行
- 漫画:什么是 “代理模式” ?
- reduce 轻松将cookie转化为对象
- 求解出n以内所有能被5整除的正整数的乘积_所有最常见最经典的算法题都在这里了...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
- 零基础学习Java-素数和
- (案例五)将数据保存在MongoDB中
- 为什么需要分布式配置中心
- Matlab画图常用命令
- ASO优化如何不花钱也能上榜
- SPI驱动之南瑞NRSEC3000加密芯片驱动开发总结
- 解耦——Hybrid H5跨平台性思考
- 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc
- win10如何修改dns服务器地址,win10如何修改dns服务器地址
- Python正则(粗略)
- 【U3D小游戏】愤怒的小鸟(三)猪的相关
- LInux:进程等待之wait() waitpid()
- 日常英文缩写以及杂记
- sql server 获取当前日期所在得周一和周日
- CentOS 7下ngrok服务器搭建
热门文章
- 在html上运行asp,ASP在网页设计的作用
- LQR,iLQR,DDP控制论经典算法(MBRL基础知识)
- sierpinski三角形的维数_神奇的分形艺术(二):Sierpinski三角形
- 设计模式 - 桥接模式 ( Bridge ) 平时用的少
- Anaconda2020安装与使用
- 通信服务器的作用是什么意思,通讯管理机是什么 通讯管理机的作用功能及特点...
- 东方联盟创始人郭盛华:互联网守护神的传奇故事
- 产品静电ESD测试标准
- 计算机课第一节可以讲些什么,高职《大学计算机基础》第1节课讲点什么?
- Python实现一键翻译英文论文,实现了pdf文档英译汉,pdf格式不变