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

有效的山脉数组

时间:2023-06-14 19:34:53浏览次数:57  
标签:index arr false int 有效 length 数组 山脉

给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。

让我们回顾一下,如果 arr 满足下述条件,那么它是一个山脉数组:

arr.length >= 3
在 0 < i < arr.length - 1 条件下,存在 i 使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
 

示例 1:

输入:arr = [2,1]
输出:false
示例 2:

输入:arr = [3,5,5]
输出:false
示例 3:

输入:arr = [0,3,2,1]
输出:true

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-mountain-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

屎山写法

class Solution {
    public boolean validMountainArray(int[] arr) {
        //递增递减扫描
        int index = 0;
        while(index < arr.length-1&& arr[index] < arr[index+1]){
            index++;
        }
        if(index==0||index==arr.length-1) return false;
        while(index < arr.length-1&& arr[index] > arr[index+1]){
            index++;
        }
        return index == arr.length-1;
    }
}

双指针方法

class Solution {
    public boolean validMountainArray(int[] arr) {
        //左右指针进行扫描,满足递增规则start++,满足递减规则end--
        int start = 0,end = arr.length-1;
        if(arr.length<3)return false;
        //因为start和end的初始位置可能为递增规则和递减规则之后的值,为了错开
        while(start<arr.length-2&&arr[start]<arr[start+1]){
            start++;
        }
        while(end>=2&&arr[end]<arr[end-1]){
            end--;
        }
        return start==end;
    }
}

标签:index,arr,false,int,有效,length,数组,山脉
From: https://www.cnblogs.com/xiaochaofang/p/17481166.html

相关文章

  • 每日一道leetcode:4. 寻找两个正序数组的中位数
    1.题目(困难)题目链接给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=[1,2],nu......
  • 【数据结构与算法面试题】子数组的最大和
    题目来源“数据结构与算法面试题80道”。问题分析:在数组的每一个位置处保存当前的最大值,当前的最大值组成为:解决方案:intget_max_subarray(int*a,intlength,bool&is_array_ok){ if(NULL==a||length<=0){ is_array_ok=false; return0; } int*p_h_a=(int*......
  • 92 面向对象 商品(多个属性)放入3个数组中
    对象packagecom.fqs.goods;publicclassGoods{privateintid;privateStringname;privatedoubleprice;privateintgeShu;publicGoods(){}publicGoods(intid,Stringname,doubleprice,intgeShu){this.id=......
  • 修改kubeadm证书长期有效
    获取kubernetesv1.18.16源码包gitclonehttps://github.com/kubernetes/kubernetes.git-bv1.18.16或者以下方式下载解压wgethttps://github.com/kubernetes/kubernetes/archive/refs/tags/v1.18.16.tar.gztar-zxvfv1.18.16.tar.gz进入目录cdkubernetes修改cmd/kub......
  • 后缀数组
    后缀树和后缀数组讲解:https://blog.csdn.net/weixin_30790841/article/details/96620579?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1https://blog.csdn.net/......
  • C# 获取数组排序后的下标
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp9{classProgram{staticvoidMain(string[]args){int[]src=newint[]{2,1......
  • JavaScript中数组(Array)与对象(Object)中的检索方式
    这里只是要说明一点,数组(Array)和对象(Object)都可以用[...]的方式来进行检索[...]中包含的需要是一个表达式,这个表达式的值最终会以字符串的形式被使用因为不论是数组(Array)还是对象(Object),他们都是以键值对的形式存储内容的,而所有的键的数据类型都是字符串(Array好像不是,但是先这样......
  • java开发C语言解释器:数组元素的读取和赋值
    本节技术内容难度较大,请结合视频对代码的讲解和调试来理解本节内容:用java开发编译器一个成熟的编译器或解释器,要能够解析和执行目标语言开发的逻辑复杂的程序代码,我们用java开发的C语言解释器,能够执行用C语言开发的较为复杂的程序时,才称得上是合格的,从本节开始,我们致力于C语言解......
  • 面试算法:在整形数组中构建元素之和能整除数组长度的子集
    更详细的讲解和代码调试演示过程,请参看视频如何进入google,算法面试技能全面提升指南假设A是一个整数数组,长度为n,数组中的元素可能是重复的。设计一个算法,找到一系列下标的集合I={i(0),i(1),i(2)….i(n)}.使得(A[i(0)]+A[i(1)]+…A[i(n)])modn=0.例如假定A={711......
  • 面试算法:波浪型数组的快速排序法
    波浪型数组是具备这样特性的数组,它的元素先是递增,到达某个点后开始低贱,接着达到某个点时又递增,接着右递减,以下数组就是一个波浪型数组:A:57,131,493,294,221,339,418,452,442,190A[0]A[1]A[2]A[3]A[4]A[5]A[6],A[7],A[8],A[9]不难发现,A[0]-A[4]是一个波浪,因为......