1、题目描述

我们把数组 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。)

输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
输入:[2,2,2]
输出:0
解释:不含 “山脉”。

2、代码详解

data_list = [1,3,6,7,6,8,2,4,2,1]def longest_mountain(data_array):n = len(data_array)if n <= 2:return 0length_max = 0i = 1 # 左边界从1也就是第二个元素开始遍历while i < n-1:  # 右边界if data_array[i-1] < data_array[i] and data_array[i] > data_array[i+1]: # 例如: 1< 3 >2left = i - 1right = i + 1  # 以i为山顶的右山底while left > 0 and data_array[left-1] < data_array[left]:  # 向左找山底left -= 1while right < n-1 and data_array[right+1] < data_array[right]:  # 向右找山底right += 1length_max = max(length_max, (right-left+1))i = right  # 指针 移动到右边不满足条件的位置else:i += 1  # 移动左边界return length_max# 枚举山顶
def longest_mountain_v1(data_array):''': 遍历每个元素 找到向左边能延申的最长长度 找到向右边能延申的最长长度 左边+右边+本身(1)就是最长的长度 最后求最大值: 左侧山脚到山顶的序列是严格单调递增的,而从山顶到右侧山脚的序列是严格单调递减'''if not data_array:return 0n = len(data_array)left = [0] * nfor i in range(1, n):left[i] = (left[i - 1] + 1 if data_array[i - 1] < data_array[i] else 0)  # 向右遍历 递增则当前可延申的长度为前一个+1,否则为0right = [0] * nfor i in range(n - 2, -1, -1):right[i] = (right[i + 1] + 1 if data_array[i + 1] < data_array[i] else 0) # 向左遍历 递减则当前可延申的长度为前一个+1,否则为0ans = 0for i in range(n):if left[i] > 0 and right[i] > 0:ans = max(ans, left[i] + right[i] + 1)return ansprint(longest_mountain(data_list))
print(longest_mountain_v1(data_list))

Python LeetCode 数组中的最长山脉相关推荐

  1. LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉

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

  2. LeetCode 845. 数组中的最长山脉

    https://leetcode-cn.com/problems/longest-mountain-in-array/ 难度:中等   我们把数组 A 中符合下列属性的任意连续子数组 B 称为 &qu ...

  3. 力扣 数组中的最长山脉

    力扣 数组中的最长山脉 题目描述 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.le ...

  4. 845. 数组中的最长山脉

    链接:845. 数组中的最长山脉 题解: class Solution {public:int longestMountain(vector<int>& nums) {if(num ...

  5. 0数组中等 LeetCode845. 数组中的最长山脉

    845. 数组中的最长山脉 描述 把符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 ...

  6. LeetCode 845. 数组中的最长山脉(中心扩展)

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

  7. JAVA程序设计:数组中的最长山脉(LeetCode:845)

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

  8. 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)

    把符合下列属性的数组 arr 称为 山脉数组 :arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 arr[0] < arr[1 ...

  9. Leetcode--845. 数组中的最长山脉

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

  10. Leetcode每日一题:845.longest-mountain-in-array(数组中的最长山脉)

    思路:这道题可以设两个标志位up 和 down,分别表示上山状态和经过上山后的下山状态,所以会遇到以下几种情况,分情况处理即可: 1.遇到上坡: 下山状态down==true遇到上坡,说明前一个山脉已 ...

最新文章

  1. [高级软件工程教学]团队Beta阶段成绩汇总
  2. 思科模拟器32位_三款另类的68k Mac模拟器
  3. 使用BootStrapValidator来完成前端输入验证
  4. 如何让li中内容超出部分显示为...?
  5. uml建模工具_Visual Paradigm 教程[UML]:绘制UML配置文件图
  6. Java程序员实现完美代码的十大要素
  7. linux 与 windows操作系统的区别
  8. 【RDMA】ibv 函数和相关问题|IBV_SEND_INLINE
  9. 类似于wps的linux软件,出了Office、WPS还有哪些好用的办公软件?
  10. MVC 简介,MVC数据库
  11. Struts1.x系列教程:用MyEclipse开发第一个Struts程序
  12. 先有java后有天_Java基础第十四天总结——面向对象(下)
  13. 【开源电机驱动】H 桥驱动-软件篇
  14. 新学期新环境学习计划
  15. java发现杯_达内第二届发现杯软件大赛(JAVA A卷)试题.docx
  16. 矩阵变换PA=B理解
  17. 重磅| 创业者的格局要大——徐小平谈中国创业
  18. python讲师招聘天津_SiKi学院Python人工智能讲师招聘
  19. springboot基于web儿童教育网站 毕业设计-附源码111123
  20. Ubuntu ssh 安卓手机

热门文章

  1. 利用Excel批量快速发送电子邮件
  2. 洛谷 P4093 [HEOI2016/TJOI2016]序列 k-d tree
  3. java随机生成姓名
  4. 晶体二极管工作原理(详解)
  5. 经典,一文讲透ESD原理和设计
  6. Activity 生命周期详解与异常情况生命周期
  7. BroadcastReceiver生命周期探讨
  8. dhcp authoritative参数作用
  9. 【前端面试题】数据类型-js
  10. 偏差方差分解中为什么第三行第六行为零