当前位置: 首页 > news >正文

LeetCode 845.数组中的最长山脉

把符合下列属性的数组 arr 称为 山脉数组 :

arr.length >= 3
存在下标 i(0 < i < arr.length - 1),满足
arr[0] < arr[1] < … < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > … > arr[arr.length - 1]
给出一个整数数组 arr,返回最长山脉子数组的长度。如果不存在山脉子数组,返回 0 。

示例 1:

输入:arr = [2,1,4,7,3,2,5]
输出:5
解释:最长的山脉子数组是 [1,4,7,3,2],长度为 5。
示例 2:

输入:arr = [2,2,2]
输出:0
解释:不存在山脉子数组。

提示:

1 <= arr.length <= 104^44
0 <= arr[i] <= 104^44

进阶:

你可以仅用一趟扫描解决此问题吗?
你可以用 O(1) 空间解决此问题吗?

分组循环,每一组是一个山脉:

class Solution {
public:int longestMountain(vector<int>& arr) {int n = arr.size();int ans = 0;int i = 0;while (i < n) {int start = i;++i;// 如果一上来就下降或保持水平,则一定不是山脉组起点if (i < n && arr[i] <= arr[start]) {continue;}// 上升过程while (i < n && arr[i] > arr[i - 1]) {++i;}// 如果到了山顶后,后面没有数字了,或者是平顶山,则一定也不是山脉组if (i == n || arr[i] == arr[i - 1]) {continue;}// 下降过程while (i < n && arr[i] < arr[i - 1]) {++i;}ans = max(ans, i - start);// 如果右山脚低于右边紧邻位置,则下次从右山脚开始找山脉组if (i < n && arr[i] > arr[i - 1]) {--i;}}return ans;}
};

如果arr的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

http://www.dtcms.com/a/389417.html

相关文章:

  • 分布式存储与NFS:现代架构选型指南
  • SpringBoot三级缓存如何解决循环依赖的问题
  • 火山引擎 veCLI 发布,开启智能开发新模式
  • UE学习记录11----地形数据获取等高线
  • 【C++】STL--priority_queue(优先级队列)使用及其模拟实现、容器适配器和deque(双端队列)了解
  • 数学差能学人工智能吗?
  • Verilog语法学习EP10:串口接收模块
  • 使用obs同步录制窗口的高质量游戏模式视频
  • Qt语言家的简单使用记录
  • Taro + vue3项目,如何生成安卓 apk 安装包
  • Hive HQL命令
  • 智慧医疗新纪元:快瞳科技如何用OCR技术重塑医疗单据处理体验
  • 4.1软件工程管理-CMM2软件项目规划-思考题
  • 知识图谱对自然语言处理深层语义分析的影响与启示:2025年研究综述
  • 4.1软件工程管理-CMM2软件项目规划
  • 《手搓动态顺序表:从数组到自动扩容的华丽转身》
  • 【Day 60】Linux-LVS负载均衡
  • bash zsh sh与shell 有什么关系
  • AI时代格局重构:2025 GEO服务公司Top3
  • GEO 优化重构数字营销格局 孟庆涛技术创新引领行业突破
  • 思迈特 Agent BI 发布,重构数据应用新范式
  • 重构组态软件边界:紫金桥如何实现原生跨平台?
  • 工作中的好奇心:Perplexity CEO的AI时代洞察
  • JsonCpp:高效序列化与反序列化指南
  • (树)Leetcode98二叉搜索树
  • 【笔记】Agent产品案例深度拆解
  • 嵌入式ARM SOC开发中文专题分享二:ARM SOC外围引脚功能说明
  • Python快速入门专业版(三十四):函数实战1:计算器程序(支持加减乘除与括号优先级)
  • datawhale玩转通义四大新模型 202509 第2次作业
  • 【项目实战】知识库——基础理论1