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——数组中的最长山脉的更多相关文章

  1. [Swift]LeetCode845. 数组中的最长山脉 | Longest Mountain in Array

    Let's call any (contiguous) subarray B (of A) a mountain if the following properties hold: B.length ...

  2. Longest Mountain in Array 数组中的最长山脉

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

  3. LeetCode:数组中的第K个最大元素【215】

    LeetCode:数组中的第K个最大元素[215] 题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: ...

  4. LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...

  5. LeetCode 421. 数组中两个数的最大异或值(Maximum XOR of Two Numbers in an Array) 71

    421. 数组中两个数的最大异或值 421. Maximum XOR of Two Numbers in an Array 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, - , a ...

  6. LeetCode 442. 数组中重复的数据(Find All Duplicates in an Array) 17

    442. 数组中重复的数据 442. Find All Duplicates in an Array 题目描述 Given an array of integers, 1 ≤ a[i] ≤ n (n ...

  7. LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)

    这是悦乐书的第365次更新,第393篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第227题(顺位题号是961).在大小为2N的数组A中,存在N+1个唯一元素,并且这些元 ...

  8. [LeetCode]215. 数组中的第K个最大元素(堆)

    题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  9. Leetcode 215. 数组中的第K个最大元素 By Python

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

随机推荐

  1. [java之设计模式]策略模式

    策略模式(strategy pattern) 定义>> 将一系列的算法封装到一些列的类里面,并且可以相互替换 作用>> 将算法的变化独立于客户端,将算法的指责和算法的行为分开, ...

  2. C#设计模式 —— 单例模式

    嗯,这是本人的第一篇随笔,就从最简单的单例模式开始,一步一步地记录自己的成长. 单例模式是最常见的设计模式之一,在项目代码中几乎随处可见.这个设计模式的目的就是为了保证实例只能存在一个.单例模式往下还 ...

  3. HTML中放置CSS的三种方式和CSS选择器

    (一)在HTML中使用CSS样式的方式一般有三种: 1 内联引用 2 内部引用 3 外部引用.   第一种:内联引用(也叫行内引用) 就是把CSS样式直接作用在HTML标签中. <p style ...

  4. C++学习---指针相关

    1.指向 “指针对象” 的 ”指针” 一般指针 int *p1,ival =42; p1 = &ival; 或者 int ival =42,*p1=&val; 代表一个指针对象指向一个 ...

  5. Spring 约束文件配置

    1.引入jar包 2.新建applicationContext.xml配置文件 位置随意,建议放在src目录下 新建的空xml文件,写入一对beans标签 3.打开Windows-->Prefe ...

  6. jQuery实现导航栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 搭建kafka高级消费 (high-consumer)php7

    说明:有很多同学在服务器上搭建好,kafka,在应用端使用kafka时候出现很多问题,这里提供下我的kafka生产和消费的php函数 环境说明: 1:首先php要有kafka扩展,在命令行中输入 ph ...

  8. background-image大小和位置的设置

    1.background-position: 当背景图很大时,可以让其固定显示在不同的位置.剩下的会隐藏. 引入背景图片:background-image: url("img/banner. ...

  9. [译]C语言实现一个简易的Hash table(5)

    上一章中,我们使用了双重Hash的技术来处理碰撞,并用了C语言实现,贲张我们将实现Hash表中的插入.搜索和删除接口. 实现接口 我们的hash函数将会实现如下的接口: // hash_table.h ...

  10. 通过SSH服务登陆linux服务器(版本RHEL7)

    通过SSH服务登陆linux服务器(版本RHEL7) SSH服务概述:是一种能够以安全的方式提供远程登陆的协议,也是目前远程管理linux系统的首选方式.在此之前,我们一般使用FTP或者telnet来 ...