首页 > 其他分享 >162. 寻找峰值

162. 寻找峰值

时间:2023-10-03 22:22:36浏览次数:33  
标签:return nums int mid 峰值 寻找 && 162

给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞ 。

你必须实现时间复杂度为 O(log n) 的算法来解决此问题。


示例 1:

输入:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2。

思路:二分


class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        if(n == 1) return 0;

        // 先特判两边情况
        if(nums[0] > nums[1]) return 0;
        if(nums[n - 1] > nums[n - 2]) return n - 1;

        int l = -1;
        int r = nums.size();

        while(l + 1 != r){
            int mid = l + (r-l)/2;
            // 当前为峰值
            if(mid >= 1 && mid < n - 1 && nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
                return mid;
            }else if(mid >= 1 && nums[mid] < nums[mid - 1]) {
                // 峰值在 mid 左侧
                r = mid;
            }else if(mid < n - 1 && nums[mid] < nums[mid + 1]) {
                // 峰值在 mid 右侧
                l = mid;
            }
        }

        return -1;
    }
};

标签:return,nums,int,mid,峰值,寻找,&&,162
From: https://www.cnblogs.com/lihaoxiang/p/17741739.html

相关文章

  • 153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果......
  • Go每日一库之162:throttled(轻量级限流工具)
    throttled是一个非常轻量且易扩展的限流组件,我们可以将它轻松地集成到应用程序中,以实现限流和配额管理的能力。简介throttled(https://github.com/throttled/throttled)基于通用信元速率算法实现了对资源的访问速率限制,资源可以是特定的URL、用户或者任何自定义的形式,可以很......
  • CF1162 Codeforces Round 557 (Div. 2) [based on Forethought Future Cup - Final Ro
    CF1162AZoningRestrictionsAgain每个位置越高越好,暴力模拟即可。#include<iostream>#include<cstdio>usingnamespacestd;constintN=55;intn,h,m;inta[N];intmain(){ scanf("%d%d%d",&n,&h,&m); for(inti=1;i<=n;i++) a[i]=h;......
  • P05509. 寻找循环节
     Descriptionf[1]=1f[2]=1f[3]=(f[2]+f[1])%modf[i]=(f[i-1]+f[i-2])%mod;1<mod<=100000输出循环节长度某一个起向右进行到某一个止的一节序列出现,首尾衔接,这一节序列称为循环节FormatInputmod的值Output循环节长度Samples输入数据12输出数据13提示110110所......
  • Android程序员35岁的职业出路:寻找新的舞台
    前言转眼间已经到了奔四的年纪,岁月匆匆,时光荏苒,转眼间已经在Android行业干了8年,当前项目组也陆陆续续进入了不少00后,80后已经不见踪影,90后正在逐渐淡出,而我,也要开始迎接程序员35岁这个坎,心里还是想要继续做技术这条路,但是也给自己思索了一些转行之路,在此跟大家交流交流。为什么35岁......
  • 练习:分治算法--有序数组寻找中位数
    题:给定两个长度为m和n有序组数array1和array2,请找出这个有序数组的中位数。'''eg.[1,3]和[5,6],中位数是4[1,2,5,8,9]和[2,3,4,5],中位数是4'''###直接方法,使用内置排序函数sort#时间复杂度最高:O((n+m)log(n+m)),空间复杂度:O(n+m)1classSolution(object):2deff......
  • 寻找app定制开发公司的10个关键因素,你知道吗?
    在今天的数字化时代,移动应用程序已经成为企业和创业者实现业务目标的关键工具之一。然而,许多组织和个人不具备足够的技术知识和资源来开发自己的应用程序,因此需要寻找可靠的app定制开发公司来实现他们的愿景。但是,在选择合适的开发公司时,需要谨慎,以下是一些关键步骤和考虑因素,以帮......
  • java笔试题,寻找多出来的元素
    题目:有两个数组a和b,其中b有一个元素是a没有的,其他元素都相同,请找出b中这个多余的元素。1publicclassTest02{2 3publicstaticvoidmain(String[]args){4int[]a={11,34,9,-4,100,98};5int[]b={34,55,11,9,100,-4,98};67intc=0;8for(inti=0......
  • 【题解】AtCoder Regular Contest 162
    A.EkidenRace题目描述:有\(n\)个人参加了往返赛跑,每个人有一个编号\(1\)到\(n\)。已知以下信息:如果按照往路的成绩排序,那么任何两个人的成绩都不相同。同时第\(i\)个人在往路中排名第\(i\)。如果按照往返的成绩排序,那么任何两个人的成绩都不相同。同时第\(i\)个人......
  • 寻找理想的退休天堂:我对美国人选择海外退休地的见解和分析
    在我多年的研究与探索过程中,我不断寻找答案:为什么越来越多的美国人选择在海外度过他们的退休时光?我将带您深入探讨这一现象,让我们一起破解其中的奥秘。1.寻找专家意见在开始这一探索之旅前,我首先寻找了该领域的知名专家。RichardFlorida和WilliamH.Frey是人口迁移研究领......