加载中...
941-有效的山脉数组(Valid Mountain Array)
发表于:2021-12-03 | 分类: 简单
字数统计: 263 | 阅读时长: 1分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/valid-mountain-array

英文原文

Given an array of integers arr, return true if and only if it is a valid mountain array.

Recall that arr is a mountain array if and only if:

  • arr.length >= 3
  • There exists some i with 0 < i < arr.length - 1 such that:
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

 

Example 1:

Input: arr = [2,1]
Output: false

Example 2:

Input: arr = [3,5,5]
Output: false

Example 3:

Input: arr = [0,3,2,1]
Output: true

 

Constraints:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 104

中文题目

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

 

提示:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 104

通过代码

高赞题解

可以使用两种指针,一个从左边找最高山峰,一个从右边找最高山峰,最后判断找到的是不是同一个山峰
image.png

public boolean validMountainArray(int[] A) {
    int len = A.length;
    int left = 0;
    int right = len - 1;
    //从左边往右边找,一直找到山峰为止
    while (left + 1 < len && A[left] < A[left + 1])
        left++;
    //从右边往左边找,一直找到山峰为止
    while (right > 0 && A[right - 1] > A[right])
        right--;
    //判断从左边和从右边找的山峰是不是同一个
    return left > 0 && right < len - 1 && left == right;
}

看下运行结果
image.png


我把部分算法题整理成了PDF文档,截止目前总共有1000多页,大家可以下载阅读
链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666

如果觉得有用就给个赞吧,还可以关注我的LeetCode主页查看更多的详细题解

统计信息

通过次数 提交次数 AC比率
63283 161070 39.3%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
938-二叉搜索树的范围和(Range Sum of BST)
下一篇:
943-最短超级串(Find the Shortest Superstring)
本文目录
本文目录