【二分查找】寻找峰值(medium)

6. 寻找峰值(medium)

  • 题⽬描述:
  • 解法⼆(⼆分查找算法):
    • 算法思路:
    • C++ 算法代码:
    • Java 算法代码:

题⽬链接:162. 寻找峰值

题⽬描述:

峰值元素是指其值严格⼤于左右相邻值的元素。
给你⼀个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何⼀个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。
⽰例 1
输⼊:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2。
⽰例 2
输⼊:nums = [1,2,1,3,5,6,4]
输出:1 或 5
解释:你的函数可以返回索引 1,其峰值元素为 2;
或者返回索引 5, 其峰值元素为 6。
提⽰
1 <= nums.length <= 1000
-231 <= nums[i] <= 231 - 1
对于所有有效的 i 都有 nums[i] != nums[i + 1]

解法⼆(⼆分查找算法):

算法思路:

寻找⼆段性:
任取⼀个点 i ,与下⼀个点 i + 1 ,会有如下两种情况:
• arr[i] > arr[i + 1] :此时「左侧区域」⼀定会存在⼭峰(因为最左侧是负⽆穷),那么我们可以去左侧去寻找结果;
• arr[i] < arr[i + 1] :此时「右侧区域」⼀定会存在⼭峰(因为最右侧是负⽆穷),那么我们可以去右侧去寻找结果。
当我们找到「⼆段性」的时候,就可以尝试⽤「⼆分查找」算法来解决问题。

C++ 算法代码:

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

Java 算法代码:

class Solution{public int peakIndexInMountainArray(int[] arr) {int left = 1, right = arr.length - 2;while(left < right){int mid = left + (right - left + 1) / 2;if(arr[mid] > arr[mid - 1]) left = mid;else right = mid - 1;}return left;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB与PHP7的集成与优化

MongoDB与PHP7的集成与优化 引言 随着互联网技术的飞速发展,数据库技术在现代软件开发中扮演着越来越重要的角色。MongoDB作为一种流行的NoSQL数据库,以其灵活的数据模型和强大的扩展性受到众多开发者的青睐。PHP7作为当前最流行的服务器端脚本语言之一,其性能和稳定性也得…

【GIT】github中的仓库如何删除?

你可以按照以下步骤删除 GitHub 上的仓库&#xff08;repository&#xff09;&#xff1a; &#x1f6a8; 注意事项&#xff1a; ❗️删除仓库是不可恢复的操作&#xff0c;所有代码、issue、pull request、release 等内容都会被永久删除。 &#x1f9ed; 删除 GitHub 仓库步骤…

焊接机排错

焊接机 一、前定位后焊接 两个机台&#xff0c;①极柱定位&#xff0c;相机定位所有极柱点和mark点&#xff1b;②焊接机&#xff0c;相机定位mark点原理&#xff1a;极柱定位在成功定位到所有极柱点和mark点后&#xff0c;可以建立mark点和极柱点的关系。焊接机定位到mark点…

认识和使用Vuex-案例

集中管理共享的数据&#xff0c;易于开发和后期维护&#xff1b;能够高效的实现组件之间的数据共享&#xff0c;提高开发效率&#xff1b;存储在Vuex的数据是响应式的&#xff0c;能够实时保持页面和数据的同步&#xff1b; 安装Vuex依赖包 npm install vuex --save导入包 im…

LLM大模型中的基础数学工具—— 信号处理与傅里叶分析

Q51: 推导傅里叶变换 的 Parseval 定理 傅里叶变换的 Parseval 定理揭示了啥关系&#xff1f; Parseval 定理揭示了傅里叶变换中时域与频域的能量守恒关系&#xff0c;即信号在时域的总能量等于其在频域的总能量。这就好比一个物体无论从哪个角度称重&#xff0c;重量始终不…

对Mac文字双击或三击鼠标左键没有任何反应

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 项目场景&#xff1a; 在使用Mac系统的时候&#xff0c;使用Apple无线鼠标&#xff0c;双击左键能够选取某个单词或词语&#xff0c;三击左键能够选取某一行&#xff0c;&#xff08;百度、…

Go语言企业级项目使用dlv调试

使用dlv调试Go语言代码 打包Go代码(禁止优化和内联&#xff08;便于调试更复杂的逻辑&#xff09;)&#xff1a; go build -gcflags"all-N -l" -o xxx_api_debug.exe启动一个dlb监听可运行程序的端口&#xff1a; dlv --listen:2345 --headlesstrue --api-version…

Kafka命令行的使用/Spark-Streaming核心编程(二)

Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量&#xff0c;副本数量&#xff0c;都是必须的。 数据的形式&#xff1a; 主题名称-分区编号。 在…

Python3:Jupyterlab 安装和配置

Python3:Jupyterlab 安装和配置 Jupyter源于Ipython Notebook项目&#xff0c;是使用Python&#xff08;也有R、Julia、Node等其他语言的内核&#xff09;进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具。 最新的基于web的交互式开发环境&#xff0c;适用于n…

快速排序及其在Unity游戏开发中的应用

一、快速排序(Quick Sort) 快速排序是一种**分治法(Divide and Conquer)**思想的排序算法,它的基本步骤是: 选一个基准元素(pivot):通常选第一个元素、最后一个元素,或者随机一个。分区(Partition):把数组分成两部分,小于等于 pivot 的放左边,大于 pivot 的放右…

【硬核干货】SonarQube安全功能

原文链接&#xff1a;【硬核干货】SonarQube安全功能 关于晓数神州 晓数神州坚持以“客户为中心”的宗旨&#xff0c;为客户提供专业的解决方案和技术服务&#xff0c;构建多引擎数字化体系。 核心业务1&#xff1a;聚焦DevOps全栈产品&#xff0c;打造需求管理、项目管理、开…

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式&#xff08;推荐&#xff09; */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…

Unity-粒子系统:萤火虫粒子特效效果及参数

萤火虫特效由两部分组成。萤火虫粒子底色粒子面片。萤火虫的旋转飞动主要由 Noise参数和Color over Lifetime模块控制。 贴图&#xff1a;中间实周边虚的圆&#xff0c;可随意自行制作 Shader&#xff1a;Universal Render Pipeline/2D/Sprite-Lit-Default 以下是粒子详细参…

K8S Service 原理、图例——深度好文

一、理论介绍 1.1、3W 法则 1、是什么&#xff1f; Service 是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当 Service 存在时&#xff0c;它的IP地址和端口不会改变。客户端通过IP地址和端口号与 Service 建立连接&#xff0c;这些连接会被路由到提供该 Service 的…

Alibaba Cloud Linux 3.2104 LTS 64位 容器优化版安装docker docker compose记录

整个安装过程耗时4小时。&#xff08;包含以下检查内容:&#xff09; 检查该linux版本信息&#xff08;并通过监控指标检查运行状态/cpu占用/内存占用/磁盘读取写入IOPS /同时连接数&#xff09; 1&#xff1a;根据当前的系统进行yum与dnf的升级&#xff0c;保持稳定修复的版本…

STM32N6570-DK ISP调试

STM32N6570-DK之ISP调试应用 准备工作-下载安装软件包:一、使用STM32CubeProgrammer给板子烧入STM32N6_ISP_IQTune_App_revC01-v1.1.0-trusted.bin。二、打开STM32 ISP IQTune.exe ,出现可连接端口:三、根据教程进行相应调试:准备工作-下载安装软件包: https://www.st.co…

12.thinkphp验证

一&#xff0e;验证器定义 1. 验证器的使用&#xff0c;我们必须先定义它&#xff0c;系统提供了一条命令直接生成想要的类&#xff1b; php think make:validate User 2. 这条命令会自动在应用目录下生成一个validate文件夹&#xff0c;并生成User.php类&#xff1b; class…

OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享

文章目录 前言一、OpenWrt 与 Docker 的集成前提1.1 硬件与内核要求1.2 软件依赖 二、Docker 环境部署与验证2.1 基础服务配置2.2 存储驱动适配 三、容器化应用部署实践3.1 资源限制策略3.2 Docker Compose 适配 四、性能优化与监控4.1 容器资源监控4.2 镜像精简策略 五、典型问…

EasyRTC音视频实时通话嵌入式SDK,打造社交娱乐低延迟实时互动的新体验

一、方案背景 在数字化时代&#xff0c;社交娱乐已经成为人们生活中不可或缺的一部分。随着移动互联网和智能设备的普及&#xff0c;用户对实时互动的需求越来越高。EasyRTC作为一款基于WebRTC技术的实时音视频通信解决方案&#xff0c;凭借其低延迟、高稳定性和跨平台兼容性&…

软件编程命名规范

编程命名规范是保证代码可读性、可维护性和团队协作效率的重要基础。以下是涵盖主流编程语言的通用命名规范&#xff0c;结合行业最佳实践和常见规范&#xff08;如Google、Microsoft、Airbnb等风格指南&#xff09;&#xff1a; 一、通用命名原则 清晰优先&#xff1a;名称应…