941. 有效的山脉数组

题目

自己写的

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;

来判断一开始的数组是上升还是下降。

写完了后看了下卡哥的讲解,比我写的好太多了。

卡哥思路:

img

卡哥代码:

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;
    }
};
posted @   hisun9  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示