给定一个数组,数组中的每个元素代表该位置的高度,0表示平地,>=1表示山峰高度,山峰的定义是当某个位置的左右高度小于自己的高度时,该位置为山峰。数组的起始位置计算时可只满足一边的条件(意思就是临界值的计算)
输入描述:一个整数数组
输出描述:
输出符合条件的山峰个数
示例1:
输入:
{1,0,2,4,2,5}
输出:
3
解释:
当在索引0的位置(起始边界),那么获取索引1的val去跟当前val判断,符合题目最后一句话:计算时可只满足一边的条件。其次当索引走到3的位置,val为4的时候,左右小于当前值,符合条件。最后,当索引走到5的时候,val也是5,也就是数组的最后一个值,符合只满足一边的条件。(理解通透)
class Solution{
public int validMountainCount(int[] arr){
//存放返回的结果
int result = 0;
int i = 0;
int len = arr.length;
while (true) {
if (i >= len) {
return result;
} else {
//前边界处理,第二个值与当前值对比
if (i == 0) {
if (arr[i + 1] < arr[i]) {
result += 1;
}
//后边界处理,最后一个值与前一个值对比
} else if (i == len - 1) {
if (arr[i - 1] < arr[i]) {
result += 1;
}
//中间处理,判断左右是否都小于当前值
} else {
if (arr[i - 1] < arr[i] && arr[i + 1] < arr[i]) {
result += 1;
}
}
}
//变量i控制循环的前进
i+=1;
}
return result;
}
}
根据题目描述,能直观的得出结果,代码的实现就是主要考虑边界值,多debug两遍,就悟了。
觉得跟这道题很像,但难度增加,喜欢挑战的朋友们可以试试。
LeetCode:摆动序列376. 摆动序列 - 力扣(LeetCode)