LeetCode845数组中的最长山脉-----双指针

题目表述

把符合下列属性的数组 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 。

进阶:

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

双指针

1、初始化一个快指针fast和慢指针slow。
2、利用fast指针寻找递增字串,如果递增字串长度为0,则不可能为山脉,令slow = fast,接着从fast在找递增字串。
3、找到山脉上升部分后再接着从fast寻找下降山脉,设置变量down,记录下降山脉的个数,如果down==0,做无下降部分,也不能成为山脉。
4、记录山脉长度,fast - slow,寻找fast - slow过程中的最大值即可

class Solution { public int longestMountain(int[] arr) { int slow = 0; int fast = 1; int res = 0; while(fast < arr.length){ while(fast < arr.length && arr[fast] > arr[fast - 1]){ fast++; } if(fast == slow + 1){ slow = fast; fast++; continue; } int down = 0; while(fast < arr.length && arr[fast] < arr[fast - 1]){ fast++; down++; } if(down != 0) res = Math.max(fast - slow,res); slow = fast - 1; } return res; } }

__EOF__

本文作者Younger
本文链接https://www.cnblogs.com/youngerwb/p/16155111.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   YoungerWb  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示