首页 > 试题广场 >

识别山脉数组

[编程题]识别山脉数组
  • 热度指数:471 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

给定一个整数数组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

输入

[0,3,2,1]

输出

true
示例2

输入

[3,5,5]

输出

false

说明

最高点不能是数组的第一个位置或最后一个位置

力扣941:有效的山脉数组

class Solution {
    public boolean validMountainArray(int[] arr) {
        if(arr.length < 3){
            return false;
        }
        int l = 0,r = arr.length - 1;
        while(l < r - 1 && arr[l] < arr[l + 1]){
            l++;
        }
        while(r > 1 && arr[r] < arr[r - 1]){
            r--;
        }
        return l == r;
    }
}
发表于 2021-08-21 14:17:11 回复(0)
public boolean validMountainArray (int[] arr) {
        int maxValue = Arrays.stream(arr).max().getAsInt();
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (maxValue == arr[i]) {
                index = i;
                break;
            }
        }
        boolean flag = true;
        int j = index;
        while (j > 0) {
            if (arr[j] <= arr[--j]) {
                flag = false;
                break;
            }
        }
        j = index;
        while (j < arr.length -  1) {
            if (arr[j] <= arr[++j]) {
                flag = false;
                break;
            }
        }
        return flag;
    }


发表于 2021-07-16 10:20:53 回复(0)
这道题目有点像“主元”的题目,主元就是归并排序的一个节点。左大右小。 
但是“主元”的思想去解答,发现错误好多次了,估计不能使用的点在于数目可能存在值重复问题。
所以这道题目反而很简单。就是一个if~else问题
发表于 2021-07-05 14:19:28 回复(0)