博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode刷题笔记 845. 数组中的最长山脉
阅读量:3747 次
发布时间:2019-05-22

本文共 1162 字,大约阅读时间需要 3 分钟。

845. 数组中的最长山脉

知识点:动态规划

时间:2020年10月25日
题目链接:

题目

我们把数组 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
解释:不含 “山脉”。

提示

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000

解法

  • 两次动态规划找山峰,对于每个点
    • 从右向左找比他小的
    • 从左向右找比他小的

代码

#include 
#include
#include
using namespace std;class Solution {
public: int longestMountain(vector
& A) {
int n = A.size(); if(n==0)return 0; vector
left(n,0); vector
right(n,0); for(int i = 1;i < n ;i++){ if(A[i-1] < A[i]) 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 ans = 0; for(int i = 0;i < n;i++){ if(left[i] && right[i]) ans = max(ans,left[i] + right[i] +1); } return ans; }};int main(){ vector
A{ 2,1,4,7,3,2,5}; Solution s; cout<
<

今天也是爱zz的一天哦!

转载地址:http://omdsn.baihongyu.com/

你可能感兴趣的文章
Java高级篇之进程
查看>>
类加载机制
查看>>
了解jdk1.8版本一些新的特性
查看>>
Java高级篇之网络通讯
查看>>
浅谈篇之线程池
查看>>
Lambda 表达式
查看>>
字符串函数MySQL
查看>>
8个SQL讲解优化
查看>>
MySQL实战续(二)
查看>>
安装Elastic和kibana
查看>>
什么是搜索
查看>>
全文检索工具elasticsearch
查看>>
Vue之条件渲染实战
查看>>
Vue之侦听属性
查看>>
求职指南(1)
查看>>
MySQL day11
查看>>
MySQL day12
查看>>
JSONP原理
查看>>
Vue.js学习笔记—插值的操作(1)
查看>>
CSS的四种方式实现水平居中
查看>>