Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
941. 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)
给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。
让我们回顾一下,如果 arr 满足下述条件,那么它是一个山脉数组:
- 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
提示:
- 1 <= arr.length <= 10^4
- 0 <= arr[i] <= 10^4
二、思路分析:
从题意可知,一直往上到顶点再一直往下的这种折线图形才能称为山峰 所以我们也可以理解为变化的趋势只改变一次,即只跳变一次 如果跳变多次,那count肯定大于1,那么就不是山峰型 且如果A[i]==A[i+1]也不对,遇到这种情况直接返回false
三、AC 代码:
class Solution {
public boolean validMountainArray(int[] A) {
if(A.length<3) return false;
int count=0;
if(A[0]>A[1]) return false;//首先检查初始趋势是否为上升
//如果没有这条语句[2,1]也会判定为对,因为他也只跳变一次
for(int i=0;i<A.length-1;i++){
if(A[i]==A[i+1]) return false;
if(count==0&&A[i]>A[i+1]){
count++;
}
if(count==1&&A[i]<A[i+1]){
count++;
}
}
return count==1;
}
}