您现在的位置是:亿华云 > 系统运维
有效的山脉数组,怎么求?
亿华云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)