Leetcode--845. 数组中的最长山脉
我们把数组 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. 数组中的最长山脉相关推荐
- 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 ...
- 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),满足 ...
- LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉
描述: 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B ...
- 力扣 数组中的最长山脉
力扣 数组中的最长山脉 题目描述 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.le ...
- JAVA程序设计:数组中的最长山脉(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语言实现
- java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
- shadow dom一个最简单的例子
- 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
- 技术面试官的一些建议
- 【POJ - 1836】Alignment(dp,LIS,最长上升子序列类问题)
- 360浏览器清除缓存_手机微信内置浏览器缓存清理指南
- Selenium系列文章汇总
- 你看得懂的海明码校验和纠错原理
- 在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)
- 加载PageOffice控件失败。 当前浏览器是42版本以上的谷歌浏览器,建议采用POBrowser技术打开PageOffice即可。
- acm之奇葩数据输入专题
- Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
- 主机甲和主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧......[数据传输率]错题总结
- Altium Designer绘制stm32最小系统原理图
- CATIA二次开发-装配技术
- WebScoket 实例 简单的网页聊天室
- qlikview连接mysql_QlikView安装
- 使用在线链接阿里图标库(iconfont)(vue)
- 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在
热门文章
- LeetCode 1295. 统计位数为偶数的数字
- LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
- 机器学习简介及学习思维导图
- os、os.path、shutil操作文件和文件路径的常用方法总结
- 利用python创建学生管理系统软件代码赏析
- 简单循迹小车实验心得_红外自动循迹小车实验报告
- python数据分析与机器学习(Numpy,Pandas,Matplotlib)
- Android官方开发文档Training系列课程中文版:通知用户之大视图通知
- Java总结:正则表达式
- python enumerate用法总结(转)