LeetCode 845——数组中的最长山脉
1. 题目
2. 解答
2.1 方法一
left 数组表示当前元素左边比当前元素小的元素个数,right 数组数组表示当前元素右边比当前元素小的元素个数。在山脉的中间 B[i] 处,其左边和右边肯定都有小于 B[i] 的元素,而山脉的长度即为 left[i] + right[i] + 1。
class Solution {public:int longestMountain(vector<int>& A) {int n = A.size();if (n < 3) return 0;vector<int> left(n, 0);vector<int> right(n, 0);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 >= 0; i--){if (A[i] > A[i+1]) right[i] = right[i+1] + 1;;}int len = 0;for (int i = 0; i < n; i++){if (left[i] != 0 && right[i] != 0)len = max(len, left[i] + right[i] + 1);}return len; }
};
2.2 方法二
max_than_left 数组若为 1 则表明当前元素比左边元素大,max_than_right 数组若为 1 则表明当前元素比右边元素大。
若为山脉则两个数组应该为如下序列
数组取值 | |||||
---|---|---|---|---|---|
max_than_left | 1(可选) | … | 1(必选) | … | 0(可选) |
max_than_right | 0(可选) | … | 1(必选) | … | 1(可选) |
class Solution {public:int longestMountain(vector<int>& A) {int n = A.size();if (n < 3) return 0;vector<int> max_than_left(n, 0);vector<int> max_than_right(n, 0);for (int i = 1; i < n; i++){if (A[i] > A[i-1]) max_than_left[i] = 1;}for (int i = 0; i < n-1; i++){if (A[i] > A[i+1]) max_than_right[i] = 1;}int result = 0;int len = 0;int left_flag = 0;int middle_flag = 0;int right_flag = 0;for (int i = 0; i < n; i++){if (max_than_left[i] == 1 && max_than_right[i] == 0){if (left_flag) result++; else {result = 3;left_flag = 1;} }else if (max_than_left[i] == 1 && max_than_right[i] == 1){if (left_flag) {result++; }else{result = 3;}left_flag = 0;middle_flag = 1;}else if (max_than_left[i] == 0 && max_than_right[i] == 1){if (right_flag) result++;if (middle_flag) {middle_flag = 0;right_flag = 1;result++;} }else{right_flag = 0;middle_flag = 0;left_flag = 0;result = 0;}if (middle_flag || right_flag) len = max(len, result);}return len;}
};
获取更多精彩,请关注「seniusen」!
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. 数组中的最长山脉
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] ...
- Leetcode每日一题:845.longest-mountain-in-array(数组中的最长山脉)
思路:这道题可以设两个标志位up 和 down,分别表示上山状态和经过上山后的下山状态,所以会遇到以下几种情况,分情况处理即可: 1.遇到上坡: 下山状态down==true遇到上坡,说明前一个山脉已 ...
最新文章
- py2exe打包python_和python爱好者谈谈如何在新版python中使用py2exe打包可执行程序
- Xamarin Essentials教程设备信息DeviceInfo
- MySQL 数据库sql命令查看表属性,mysql查看指定表的各字段最大值、是否为空等属性实例演示
- medianBlur函数
- web笔记Error:That IP address
- 《设计师要懂心理学》-第五章-人如何集中注意力
- vc++ 项目里External dependencies 的文件存放内容和各个文件的存放内容
- ERROR: Resource shrinker cannot be used for libraries报错Android开发之迁移老项目到Android Studio3.0报错的问题解决方法
- 谈到云原生, 绕不开容器化
- php zip下载损坏,php – 从zip中提取时损坏图像
- (3)FPGA面试题2倍分频
- 滴滴章文嵩:一个人的 20 年开源热情和国内互联网开源运动
- 回文数问题,两数互换位置问题(不用第三个变量)
- 浅谈Empty、Nothing
- 开机bat脚本解决steam无法自动登陆
- 设备\Device\Harddisk0\D 有一个不正确的区块
- 2个步骤,让人才成为组织进化的发动机
- 3541. 代码查重
- 从百度有啊独立看O2O发展的三大趋势
- Oracle创建数据库连接——DATABASE LINKS