自己写的
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
int l = 0, r = 1;
bool up = true, change = false;
if (arr.size() < 3)
return false;
if (arr[r] < arr[l])
up = false;
while (r < arr.size())
{
if (up)
{
if (arr[r] < arr[l])
{
up = false;
change = true;
}
else if (arr[r] == arr[l])
return false;
}
else
{
if (arr[l] <= arr[r])
return false;
}
++l, ++r;
}
if (change)
return true;
return false;
}
};
自己写的过程中也是没考虑全面,刚开始错误提交了好几次,没考虑到单调递增或单调递减的情况下能不能得出正确答案,然后还有一点是针对up
这个变量的处理,我一开始直接让它为true
了,这就表示我默认给定的数组是满足刚开始上升的,这就会若给出的数组是单调递减的情况下不通过,所以刚开始一定要通过这段代码
if (arr[r] < arr[l])
up = false;
来判断一开始的数组是上升还是下降。
写完了后看了下卡哥的讲解,比我写的好太多了。
卡哥思路:
卡哥代码:
class Solution {
public:
bool validMountainArray(vector<int>& A) {
if (A.size() < 3) return false;
int left = 0;
int right = A.size() - 1;
// 注意防止越界
while (left < A.size() - 1 && A[left] < A[left + 1]) left++;
// 注意防止越界
while (right > 0 && A[right] < A[right - 1]) right--;
// 如果left或者right都在起始位置,说明不是山峰
if (left == right && left != 0 && right != A.size() - 1) return true;
return false;
}
};
标签:arr,right,false,up,941,数组,山脉,size,left
From: https://www.cnblogs.com/hisun9/p/18550944