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

162. 寻找峰值

时间:2024-07-21 09:51:18浏览次数:15  
标签:return nums int 寻找 峰值 mid 峰顶 rm 162

题目链接:

法一、暴力 \(O(n)\)

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        if (n == 1) return 0;
        if (n == 2) {
            if (nums[0] < nums[1]) return 1;
            else if (nums[0] > nums[1]) return 0;
        }
        for (int i = 0; i < n; i++) {
            if (nums[0] > nums[1]) return 0;
            if (nums[n - 2] < nums[n - 1]) return n - 1;
            if (i > 0 && i < n - 1 && nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) return i;
        }
        return 0;
    }
};

法二、二分

(数组不有序也可二分)

题目保证峰顶一定存在,且在 \(i<n-1\) 时,若有 \(\rm nums[i] < nums[i+1]\),则在 \(\rm [i+1,n-1]\) 必有峰顶存在。
同理,若 \(\rm nums[i] > nums[i+1]\),则在 \(\rm [0,i]\) 必有峰顶存在。

证明过程:

即峰顶及右侧为 \(\rm true\),峰顶左侧为 \(\rm false\)

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        int l = 0, r = n - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (nums[mid] < nums[mid + 1]) l = mid + 1;
            else r = mid;
        }
        return l;
    }
};

标签:return,nums,int,寻找,峰值,mid,峰顶,rm,162
From: https://www.cnblogs.com/pangyou3s/p/18314182

相关文章

  • Conda的冲突解决艺术:在包依赖中寻找和谐
    Conda的冲突解决艺术:在包依赖中寻找和谐在Python开发中,Conda是一个强大的包管理器和环境管理器,它允许用户安装和管理不同版本的包,同时保持环境的隔离。然而,随着项目复杂性的增加,包之间的依赖冲突可能成为开发者面临的棘手问题。本文将深入探讨如何在Conda中使用包依赖冲突......
  • 【嵌入式DIY实例-ESP8266篇】-LCD1602显示DS1621传感器数据
    LCD1602显示DS1621传感器数据文章目录LCD1602显示DS1621传感器数据1、DS1621介绍2、硬件准备与接线3、代码实现在本文中,介绍如何将ESP8266NodeMCU板(ESP-12E)与DS1621数字温度传感器连接,其中温度值(摄氏度和华氏度)打印在1602LCD屏幕上。本项目......
  • SPI驱动--TM1628
     /*********************************************************************************@fileGPIO_Toggle\main.c*@authorMCDApplicationTeam*@versionV2.0.1*@date18-November-2011*@briefThisfilecontainsthemainfuncti......
  • C++算法实践04-寻找两个正序数组的中位数
    一、题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nu......
  • 寻找适合编写静态分析规则的语言
    本文分享自华为云社区《寻找适合编写静态分析规则的语言》,作者:Uncle_Tom。1.程序静态分析的作用程序的静态分析是一种在不运行程序的情况下,通过分析程序代码来发现潜在的错误、安全漏洞、性能问题以及不符合编码规范的情况的技术。程序的静态分析在现代软件安全中扮演着至关重......
  • 153. 寻找旋转排序数组中的最小值(中等)
    153.寻找旋转排序数组中的最小值1.题目描述2.详细题解3.代码实现3.1Python3.2Java1.题目描述题目中转:153.寻找旋转排序数组中的最小值2.详细题解  如果不考虑O(......
  • 21-162、基于51单片机电子调光台灯可控硅PWM设计-CSDN
    21-162、基于51单片机电子调光台灯可控硅PWM设计-CSDN(1)通过电子调光台灯上的按键开关,实现电子调光台灯的开启与关闭操作;(2)通过电子调光台灯上的亮度增减按键,实现其8个档位的亮度切换控制(包含全亮和熄灭);(3)按下电子调光台灯的自动调光控制按键后,可根据环境光强度自动调节灯光亮度,......
  • AP5162 降压恒流芯片 输入5.5-36V 输出800mA 20W 雾灯 指示灯方案
    概述AP5162是一款降压、恒流、高效率的高亮度LED驱动器。AP5162特别适合宽输入电压范围的应用,输入电压范围从5.5V到36V,并且AP5162对输入电压具有高的抑制比。AP5162采用内置的低导通电阻的功率开关管,简化了芯片的外围电路,只需很少的外接元件就可实现降压、恒流驱......
  • 【JS逆向】寻找某乐网登录密码加密过程
    事先声明本文章仅为我个人记录学习进度,文章内容严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标目标:获取网站登录时提交的密码加密的过程地址:oauth.d.cn/auth/goLogin.html过程分析首先打开F12,然后在页面上输入账户密码,点击......
  • 洛谷 P1162 填涂颜色
    题目链接:填涂颜色思路代码#include<bits/stdc++.h>usingnamespacestd;constintN=30+10;#definelllonglongintmp[N][N],dir[5][2]={{1,0},{0,1},{-1,0},{0,-1}},n;boolvis[N][N];boolcheck(intx,inty){returnx>=......