941.有效的山脉数组
⛰ 941.有效的山脉数组
给定一个整数数组 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]
思路
基本思想
能找到一个一个数,这个数的右边和左边都成递减趋势,并且是严格递减,而不能存在相等的情况
所以需要找到变化的点,也就是找到先上升在下降的点,上升时严格上升,递减时严格递减
在转折点之前必须严格递增,转折点之后必须严格递减,并且转折点之后严格递减,所以需要模拟严格递增的过程,一旦出现递减,说明找到了转折点,并且需要判断转折点在哪
递减的过程中不能出现递增或者想等的情况,模拟上述过程即可
执行流程
- 为了递增过程的连续性,先使用一个while循环模拟递增的过程
- 递增过程中一旦出现相等,直接返回false,一旦出现递减,说明找到了转折点
- 判断转折点是不是开头或末尾,防止[2,1]或者[1,2,3]的情况
- 递减过程中一旦出现相等,直接返回false,一旦出现递增,也返回false
- 遍历到了末尾说明一直符合要求,此时才返回true
代码
根据以上分析,得出以下代码:
|
|
总结
需要找到这个转折点,从而判断两端是否是严格递增递减