码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 941 有效的山脉数组

时间:2020-11-04 17:42:49      阅读:19      评论:0      收藏:0      [点我收藏+]

标签:位置   als   cto   执行   ++   中间   bool   tor   没有   

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 有效的山脉数组

标签:位置   als   cto   执行   ++   中间   bool   tor   没有   

原文地址:https://www.cnblogs.com/wallace-lai/p/13919625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!