首页 > 其他分享 >Leetcode-852

Leetcode-852

时间:2024-06-10 15:22:28浏览次数:7  
标签:... arr return 852 示例 length Leetcode left

题目852.山脉数组的峰顶索引

难度:简单

山脉数组arr

  • arr.length >= 3
  • 存在 i(0 < i < arr.length - 1)使得:
    • arr[0] < arr[1] < ... arr[i-1] < arr[i]
    • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i 。

示例 1:

输入:arr = [0,1,0]
输出:1

示例 2:

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

示例 3:

输入:arr = [0,10,5,2]
输出:1

示例 4:

输入:arr = [3,4,5,1]
输出:2

示例 5:

输入:arr = [24,69,100,99,79,78,67,36,26,19]
输出:2

提示:

  • 3 <= arr.length <= 104
  • 0 <= arr[i] <= 106
  • 题目数据保证 arr 是一个山脉数组

进阶:很容易想到时间复杂度 O(n) 的解决方案,你可以设计一个 O(log(n)) 的解决方案吗?

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

解题思路

  1. 直接暴力法arr[i]>arr[i-1]&&arr[i]>arr[i+1]
  2. 二分法

支持暴力法和二分法,显然二分法更快

解题代码

//暴力法
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        if(arr[0]>arr[1]){
            return 0;
        }
        for(int i=1;i<arr.size()-1;i++){
            if(arr[i]>arr[i-1]&&arr[i]>arr[i+1]){
                return i;
            } 
        }
        return arr.size()-1;
    }
};
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        // if(arr[0]>arr[1]){return 0;}
        int left=0,right=arr.size()-1,mid=left+(right-left)/2;
        while(left!=right){
            if(arr[left]<arr[mid]){
                right=mid;
            }else{
                left=mid+1;
            }
            mid=left+(right-left)/2;
        }
        return left;
    }
};

标签:...,arr,return,852,示例,length,Leetcode,left
From: https://www.cnblogs.com/cosmos42/p/18240690

相关文章

  • Leetcode-35
    题目35.搜索插入位置难度:简单给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例2:输入:nums=......
  • Leetcode-22
    题目22.括号生成难度:中等数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且**有效的**括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8来源:力扣(Lee......
  • Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2......
  • Leetcode-1221
    题目1221.分割平衡字符串难度:简单在一个平衡字符串中,'L'和'R'字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。返回可以通过分割得到的平衡......
  • Leetcode-13
    题目13.罗马数字转整数难度:简单罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。......
  • Leetcode-509
    题目509.斐波那契数难度:简单斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1) =1F(n)=F(n-1)+F(n-2),其中n>1给定n,请计算F(n)。示例1:输入:n=2输出:1解释:F(2......
  • Leetcode-917
    题目917.仅仅反转字母难度:简单给你一个字符串s,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的s。示例1:输入:s="ab-cd"输出:"dc-ba"示例2:输入:s="a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"示例3:输入:s=......
  • Leetcode-007
    题目7.整数反转难度:中等给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输......
  • Q22 LeetCode142 环形链表
    1.使用快慢指针2.快指针向后移动两个位置,慢指针向后移动一个位置3.若快慢指针能相等,则有环4.将一个指针指向head,一个指针指向fast,挨个向后遍历,相等即进环点 1publicclassSolution{2publicListNodedetectCycle(ListNodehead){3ListNodequickInd......
  • Q21 LeetCode02.07 链表相交
    1.求出两链表长度2.分情况进行长链表头结点后移3.移至相同长度,两头结点一起后移,找到公共节点 1publicclassSolution{2publicListNodegetIntersectionNode(ListNodeheadA,ListNodeheadB){34ListNodecurA=headA;5ListNod......