标签:位置 als cto 执行 ++ 中间 bool tor 没有
https://leetcode-cn.com/problems/valid-mountain-array/
根据题意可以知道,当一个数组中的最大值在数组的中间某个位置(不能在数组的左右两端)并且这个位置往左边和右边走时数组是严格递减时,该数组才是有效的山脉数组。假设我们定义两个指针i
和j
从别指向数组的左右两端并往数组中间走,只要是严格递增的那么我们就对i
和j
分别执行自增和自减。从下面的几个例子中可以看出,只有当满足条件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个时,i
和j
指针一定是相等的,但是它们要么等于0,即i == j && i == 0
;要么是等于sz - 1,即i == j && i == sz - 1
。这种情况下,上述代码是直接返回false的。
标签:位置 als cto 执行 ++ 中间 bool tor 没有
原文地址:https://www.cnblogs.com/wallace-lai/p/13919625.html