您现在的位置是:亿华云 > 系统运维

有效的山脉数组,怎么求?

亿华云2025-10-02 21:07:33【系统运维】4人已围观

简介添加新题啦,本题是一道双指针的经典应用,感受一下吧!有效的山脉数组力扣题目链接:https://leetcode-cn.com/problems/valid-mountain-array/给定一个整数

添加新题啦,怎么求本题是有效一道双指针的经典应用,感受一下吧!

有效的脉数山脉数组力扣题目链接:https://leetcode-cn.com/problems/valid-mountain-array/

给定一个整数数组 arr,如果它是怎么求有效的山脉数组就返回 true,否则返回 false。有效

让我们回顾一下,脉数如果 A 满足下述条件,怎么求那么它是有效一个山脉数组:

arr.length >= 3

在 0 < i < arr.length - 1 条件下,存在 i 使得:

arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] > ... > arr[arr.length - 1]

示例 1:

输入:arr = [2,脉数1] 输出:false

示例 2:

输入:arr = [3,5,5] 输出:false

示例 3:

输入:arr = [0,3,2,1] 输出:true

思路

判断是山峰,云服务器提供商主要就是怎么求要严格的保存左边到中间,和右边到中间是有效递增的。

这样可以使用两个指针,脉数left和right,怎么求让其按照如下规则移动,有效如图:

注意这里还是脉数有一些细节,例如如下两点:

因为left和right是数组下表,移动的过程中注意不要数组越界 如果left或者right没有移动,云南idc服务商说明是一个单调递增或者递减的数组,依然不是山峰

C++代码如下:

class Solution {  public:     bool validMountainArray(vector<int>& A) {          if (A.size() < 3) return false;         int left = 0;         int right = A.size() - 1;         // 注意防止越界         while (left < A.size() - 1 && A[left] < A[left + 1]) left++;         // 注意防止越界         while (right > 0 && A[right] < A[right - 1]) right--;         // 如果left或者right都在起始位置,说明不是山峰         if (left == right && left != 0 && right != A.size() - 1) return true;         return false;     } }; 

如果想系统学一学双指针的话, 可以看一下这篇双指针法:总结篇!

其他语言版本

Java

class Solution {      public boolean validMountainArray(int[] arr) {          if (arr.length < 3) {  // 此时,一定不是有效的山脉数组             return false;         }         // 双指针         int left = 0;         int right = arr.length - 1;         // 注意防止指针越界         while (left + 1 < arr.length && arr[left] < arr[left + 1]) {              left++;         }         // 注意防止指针越界         while (right > 0 && arr[right] < arr[right - 1]) {              right--;         }         // 如果left或者right都在起始位置,说明不是山峰         if (left == right && left != 0 && right != arr.length - 1) {              return true;         }         return false;     } } 

【编辑推荐】

鸿蒙官方战略合作共建——HarmonyOS技术社区 照抄不翻车:抗住千万流量的大型分布式系统架构设计 2021年五大开源式游戏化工具 数字化转型的云服务器七大热门趋势和三大渐冷趋势 Windows 11新预览版22449推送:启动引导动画变样了 什么情况?游戏玩家大规模退回Windows 7系统:Windows 10暴跌

很赞哦!(26)