LeetCode 941 有效的山脉数组

Posted wallace-lai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 941 有效的山脉数组相关的知识,希望对你有一定的参考价值。

LeetCode 941 有效的山脉数组

https://leetcode-cn.com/problems/valid-mountain-array/

根据题意可以知道,当一个数组中的最大值在数组的中间某个位置(不能在数组的左右两端)并且这个位置往左边和右边走时数组是严格递减时,该数组才是有效的山脉数组。假设我们定义两个指针ij从别指向数组的左右两端并往数组中间走,只要是严格递增的那么我们就对ij分别执行自增和自减。从下面的几个例子中可以看出,只有当满足条件i == j && i != 0 && i != A.size() - 1时,该数组才是有效山脉数组。

技术图片
技术图片
技术图片技术图片

所以,代码可以写成:

class Solution {
public:
    bool validMountainArray(vector<int>& A) {
        int sz = A.size();
        int i = 0, j = sz - 1;

        while (i + 1 < sz && A[i] < A[i + 1]) ++i;
        while (j - 1 >= 0 && A[j] < A[j - 1]) --j;
        return (i == j && i != 0 && i != sz - 1);
    }
};

大家可能会有疑问,就是题目中要求山脉数组的元素个数是大于等于3的,这个限制条件为什么没有在代码中直接体现呢?其实,就像上图中给出的例子一样,只要当数组元素个数小于3个时,ij指针一定是相等的,但是它们要么等于0,即i == j && i == 0;要么是等于sz - 1,即i == j && i == sz - 1。这种情况下,上述代码是直接返回false的。



以上是关于LeetCode 941 有效的山脉数组的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 941. 有效的山脉数组(Valid Mountain Array)

leetcode第941题

数组941. 有效的山脉数组

Leetcode 941. Valid Mountain Array

LeetCode 852. 山脉数组的峰顶索引

LeetCode852. 山脉数组的峰顶索引(C++)