当前位置: 首页 > news >正文

leetcode 162 寻找峰值

一、题目描述

二、解题思路

(1)解法一:暴力法

数组只有三种情况,单调递增(顶峰为首位),单调递减(顶峰为最后一位),不单调(顶峰在中间),处理完边界条件后,利用循环可以找到第一个峰值,即为所求。

(2)解法二:二分法

具有“二段性”,可以使用二分法来解决这个问题。

如果nums[mid]<nums[mid+1],则mid+1到nums.size()-1的区间内一定有峰值,更新left=mid+1;

如果nums[mid]>nums[mid+1],则0到mid的区间内一定有峰值,更新right=mid;

三、代码实现

解法一:暴力法

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:int findPeakElement(vector<int>& nums) {//暴力法//边界处理if(nums.size()==1) return 0;if(nums[0]>nums[1]) return 0;if(nums[nums.size()-1]>nums[nums.size()-2]) return nums.size()-1;int i;for(i=1;i!=nums.size();i++){if(nums[i-1]>nums[i])break;}return i-1;}
};

解法二:二分法

时间复杂度:T(n)=O(log2)

空间复杂度:S(n)=O(1)

class Solution {
public:int findPeakElement(vector<int>& nums) {//二分法int left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]>nums[mid+1]) right=mid;else if(nums[mid]<nums[mid+1]) left=mid+1;}return left;}
};

http://www.dtcms.com/a/349138.html

相关文章:

  • 1、vue2面试题--生命周期
  • Goang开源库之go-circuitbreaker
  • HTTP请求中的CGI请求与登录注册机制
  • AI大模型企业落地指南-笔记01
  • Data_Formats_GRIDGeoTIFFShapeFile
  • 数据产品(2)用户画像数据分析模型
  • 【计算机视觉】CaFormer
  • 房屋装修设计管理系统的设计与实现/房屋装修管理系统
  • 审核问题——应用未配置图标的前景图和后景图
  • 深度剖析Spring AI源码(十):实战案例:智能客服系统
  • MySQL-delete tableName from ...
  • [GeographicLib] LocalCartesian用法
  • 从成本中心到价值创造者:网络安全运维的实施框架与价值流转
  • 深入两种高级并发设计模式
  • 零基础玩转STM32:深入理解ARM Cortex-M内核与寄存器编程
  • 奈飞工厂:算法优化实战
  • MySQL性能优化的5个维度
  • 02-开发环境搭建与工具链
  • 【Android Kotlin】Kotlin专题学习
  • 十一、redis 入门 之 数据持久化
  • [滑动窗口]1493. 删掉一个元素以后全为 1 的最长子数组
  • 3.6 虚拟存储器 (答案见原书 P225)
  • 国内第一本系统介绍 Obsidian 的书出版了
  • 基于Python的淘宝电商服装价格可视化分析
  • 【知识杂记】卡尔曼滤波及其变种,从理论精要到工程实践深入解析
  • AI代理需要数据完整性
  • C++ 可变参数模板(Variadic Templates)
  • 2025年09月计算机二级Java选择题每日一练——第六期
  • c#_数据持久化
  • LangGraph 那点事