首页 > 其他分享 >941. 有效的山脉数组

941. 有效的山脉数组

时间:2024-11-17 19:18:54浏览次数:1  
标签:arr right false up 941 数组 山脉 size left

题目

自己写的

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;
    }
};

标签:arr,right,false,up,941,数组,山脉,size,left
From: https://www.cnblogs.com/hisun9/p/18550944

相关文章

  • 代码随想录:长度最小的子数组
    代码随想录:长度最小的子数组现在不像考研那时候,每天时间都是固定的,以后可能还是以周为单位定目标比较好一点滑动窗口问题,之后记得和计算机网络里的滑动窗口对比,并且和背包问题对比classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){i......
  • STL之动态数组
    一、标准模板库(StandardTemplateLibrary,STL)是HP公司开发的一个C++模板库,包含一些常用的数据结构和算法。具有以下的组件:1.容器:容纳包含一组元素的对象。2.迭代器:提供访问容器的方法3.函数对象4.算法二、STL之向量——vector   vector是c++标准库提供的一个变长数......
  • 【C++笔记】一维数组元素处理
    目录1.插入元素方法代码2.删除元素方法代码3.交换元素方法代码1.插入元素方法概念:插入元素是指在数组的某个位置添加一个新元素,并将原来的元素向后移动。例如,将5插入到数组[1,2,4,6]的第二个位置,结果变为[1,5,2,4,6]。关键点:确定插入位置:首先要明......
  • 一文搞懂!数组作为函数输入如何声明?
    一维数组函数形参定义:voidarray_print(inta[])一维数组指针函数形参定义:voidarray_print(int*a)二维数组函数形参定义://必须指明数组的列数,数组的行数没有太大关系//因为函数调用时传递的是一个指针,它指向由行向量构成的一维数组//所以以下两种声明方式都可以......
  • (nice!!!)(LeetCode) 3240. 最少翻转次数使二进制矩阵回文 II (分类讨论、数组)
    题目:3240.最少翻转次数使二进制矩阵回文II思路:分类讨论,需要对行和列的个数进行讨论,时间复杂度为0(nm),细节看注释。C++版本:classSolution{public:intminFlips(vector<vector<int>>&grid){intans=0;intn=grid.size(),m=grid[0].size();......
  • 除自身以外数组的乘积
    力扣链接:.-力扣(LeetCode)给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32位 整数范围内。请 不要使用除法,且在 O(n) ......
  • 树状数组的两种写法
    首先是下标从\(1\simn\),使用\(lowbit(x)=x\&\–x\)template<typenameT>classFenwick{public:vector<T>fenw;intn;Fenwick(int_n):n(_n){fenw.resize(n+1);}voidmodify(intx,Tw){while(x<=n){......
  • 4. 寻找两个正序数组的中位数
    题目链接解题思路用双指针,或者辅助数组的方法这里就不过多解释了,现在说最优解。我们可以利用两个数组「有序」的特点,找到其中位数。直接举例子,假设其中一个数组nums1是[1,3,5,7,9],另一个数组nums2是[2,4,6,8],中位数我们先人工算出来,是5,也就是整体的第5小的数,也就......
  • 数组...
    2.1.1什么是数组,为什么要使用数组?java中存储数据的最小单元是变量,一个变量只能存储一个数据,如果需要存储大量的数据就需要使用大量的变量,因此需要一种新的数据类型能够存储大量数据的数据类型-数组数组-用来存储大量相同数据的集合。2.1.2如何使用数组?1)数组的初始化数据......
  • JavaScript常用对象方法二:数组(array)
    1.concat()用于连接两个或多个数组。该方法不会改变现有的数组,而是返回一个新的数组。个人感觉es6出来的扩展运算符比这个方法要简洁一些扩展运算符的方法:constarr1=[1,2];constarr2=[3,4];constarr3=[...arr1,...arr2];console.log(arr3);//[1,2,......