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

二分法寻找无序序列的峰值

 首先考虑边界的情况

(1)当只有一个数,那就返回0;

(2)如果有两个数,看1是否大于0,大于返回1;

(3)看数组末尾两个数,是否存在size-1>size-2;如果是直接返回size-1;

然后开始二分

已经明确首尾是下降趋势,再看mid与mid+1;如果也是下降趋势,证明mid与R之间不会存在最大值;所以R左移,砍掉右边;反之亦然

代码:

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param nums int整型vector* @return int整型*/int findPeakElement(vector<int>& nums) {// write code hereif(nums.size()==1)  return 0;if(nums.size()==2){if(nums[1]>nums[0]){return 1;}}if(nums[nums.size()-1]>nums[nums.size()-2]){return nums.size()-1;}int L = 0;int R = nums.size() - 1;int mid = 0;while (L < R) {mid = L + ((R - L) >> 1);if (nums[mid] > nums[mid + 1]) {R = mid;} else {L = mid + 1;}}return L;}
};

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

相关文章:

  • 【Scratch】从入门到放弃(五):指令大全-运算、变量、自制积木
  • 第14次课 认识图 A
  • 一分钟快速了解Apache
  • 阿里开源AI大模型ThinkSound如何为视频配上灵魂之声
  • 分层架构的C++高并发内存池性能优化
  • 【PTA数据结构 | C语言版】出栈序列的合法性
  • Paimon Lookup 哈希文件和Sort文件选择
  • 粒子滤波|粒子滤波的相关算法理论介绍
  • el-tree 懒加载 loadNode
  • Vue》》总结
  • Flutter、React Native、Uni-App 的比较与分析
  • Redis分布式锁面试笔记
  • wedo智能车库-----第31节(免费分享图纸)
  • 【离线数仓项目】——数据模型开发实战
  • Kafka——聊聊Kafka的版本号
  • 前后端分离项目的完整部署(Jenkins自动化部署)
  • ScreenToGif开源免费GIF录制制作工具,一键生成编辑GIF文件,自用多年
  • 【嵌入式】51单片机学习笔记-Keil5软件安装教程
  • Qt6中出现 OpenCV(4.10.0) Error: Assertion failed
  • 软件开发模型
  • UV的使用总结
  • Git企业级开发(多人协作)
  • 从万亿参数到「会动手」:Kimi-K2 如何重新定义开源大模型的边界
  • Linux/Ubuntu安装go
  • 【Linux网络】IP 协议详解:结构、地址与交付机制全面解析
  • ABP VNext + OpenTelemetry + Jaeger:分布式追踪与调用链可视化
  • AI 基础概念一:芯片类型和软硬件框架
  • [爬虫知识] 深入理解多进程/多线程/协程的异步逻辑
  • 下载 | Win11 24H2 正式版更新!(ISO映像、年度更新版本、26100.4652、Windows 11)
  • STL——vector的底层实现C++