题目
自己写的
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;}
};