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

【LeetCode刷题-二分查找】--162.寻找峰值

162.寻找峰值

image-20231112104629733

方法一:寻找最大值

题目保证了nums[i]≠nums[i+1],所以数组nums中最大值两侧的元素一定严格小于最大值本身,因此最大值所在的位置就是一个可行的峰值位置

class Solution {public int findPeakElement(int[] nums) {int idx = 0;for(int i=0;i<nums.length;i++){if(nums[i] > nums[idx]){idx = i;}}return idx;}
}

方法二:使二分查找优化迭代爬坡

image-20231112104931752

image-20231112104944213

class Solution {public int findPeakElement(int[] nums) {int n = nums.length;int left = 0,right = n - 1,ans = -1;while(left <= right){int mid = (left + right) / 2;if(compare(nums,mid - 1,mid) < 0 && compare(nums,mid,mid + 1) > 0){ans = mid;break;}if(compare(nums,mid,mid + 1)< 0){left = mid + 1;}else{right = mid -1;}}return ans;}// 辅助函数,输入下标 i,返回一个二元组 (0/1, nums[i])// 方便处理 nums[-1] 以及 nums[n] 的边界情况public int[] get(int[] nums,int idx){if(idx == -1 || idx == nums.length){return new int[]{0,0};}return new int[]{1,nums[idx]};}public int compare(int[] nums,int idx1,int idx2){int[] num1 = get(nums,idx1);int[] num2 = get(nums,idx2);if(num1[0] != num2[0]){return num1[0] > num2[0] ? 1:-1;} if(num1[1] == num2[1]){return 0;}return num1[1] > num2[1] ? 1:-1;}
}

方法三:二分查找

  • 在题目描述中出现了nums[-1]=nums[n]=-∞,就代表着只要数组中存在一个元素比相邻元素大,那么沿着它一定就可以找到一个峰值
  • 根据上述结论,可以使用二分查找找到峰值
  • 查找时,左指针l,右指针r,以其保持左右顺序为循环条件
  • 根据右指针计算中间位置m,并比较m和m+1的值,如果m较大,则左侧存在峰值,r=m,如果m+1较大,则右侧存在峰值,l=m+1
class Solution {public int findPeakElement(int[] nums) {int left = 0, right = nums.length - 1;for (; left < right; ) {int mid = left + (right - left) / 2;if (nums[mid] > nums[mid + 1]) {right = mid;} else {left = mid + 1;}}return left;}
}

相关文章:

【LeetCode刷题-二分查找】--162.寻找峰值

162.寻找峰值 方法一&#xff1a;寻找最大值 题目保证了nums[i]≠nums[i1]&#xff0c;所以数组nums中最大值两侧的元素一定严格小于最大值本身&#xff0c;因此最大值所在的位置就是一个可行的峰值位置 class Solution {public int findPeakElement(int[] nums) {int idx 0…...

vscode调试react 最初的源码

如果直接在react项目中打点调试, 调试的是 react-dom.development.js, 而源码里这些逻辑是分散在不同的包里的,如何才能够调试 React 最初的源码呢&#xff1f; JS 代码经过编译&#xff0c;会产生目标代码&#xff0c;但同时也会产生 sourcemap。sourcemap 的作用就是映射目…...

Netty网络通信模型

传统IO模型&#xff1a; 传统IO模型就是阻塞IO&#xff0c;即处理业务逻辑的线程去进行IO&#xff0c;当然IO操作很耗时&#xff0c;然后线程就得阻塞&#xff0c;当然CPU会回收该线程的时间片&#xff0c;把该线程挂起&#xff0c;切换到其他线程去执行&#xff0c;在并发量大…...

.NET快速对接极光消息推送

什么是消息推送&#xff1f; 很多手机APP会不定时的给用户推送消息&#xff0c;例如一些新闻APP会给用户推送用户可能感兴趣的新闻&#xff0c;或者APP有更新了&#xff0c;会给用户推送是否选择更新的消息等等&#xff0c;这就是所谓的“消息推送”。 常见的一些APP消息推送…...

Doris:多源数据目录(Multi-Catalog)

目录 1.基本概念 2.基本操作 2.1 查看 Catalog 2.2 新增 Catalog 2.3 切换 Catalog 2.4 删除 Catalog 3.元数据更新 3.1手动刷新 3.2定时刷新 3.3自动刷新 4.JDBC Catalog 4.1 上传mysql驱动包 4.2 创建mysql catalog 4.3. 读取mysql数据 1.基本概念 …...

建行驻江门市分行纪检组以政治谈话压责任促发展

开展政治谈话&#xff0c;是加强“一把手”和领导班子监督、严肃党内政治生活、加强对党员领导干部日常教育管理的有效手段。 为督促“一把手”和领导班子成员依法依规履行职责、行使权力&#xff0c;推动党中央重大决策部署以及建设银行总行、广东省分行党委的决策部署在本单…...

如何从存档服务器上完全删除PDM用户

当创建新用户时使用“PDM 登录”类型&#xff08;如下图&#xff09;&#xff0c;PDM用户名和密码会存储于存档服务器的注册表中。 存档服务器的注册表位置如下&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Applications\PDMWorks Enterprise\ArchiveServer\ConisioU…...

导师对学生学术论文的指导包括哪些方面,请详细展开说明

导师在指导学生学术论文时涉及多个方面&#xff0c;这些方面旨在帮助学生培养独立研究和学术写作的能力。以下是一些导师可能涉及的主要方面&#xff1a; 1.选题和课题确定&#xff1a; 导师会与学生讨论潜在的研究兴趣和方向&#xff0c;帮助学生选择一个既有研究价值又符合其…...

嵌入式软件开发是个啥职业?

在硬件行业中&#xff0c;有一类工作岗位是更偏向软件的&#xff0c;或者说是软硬结合非常紧密的工作&#xff0c;那就是嵌入式开发工程师。 说起嵌入式&#xff0c;可能很多没有接触过电子类的人没有听说这些东西。 其实简单来说&#xff0c;嵌入式开发就是写程序去控制硬件电…...

03【远程协作开发、TortoiseGit、IDEA绑定Git插件的使用】

上一篇&#xff1a;02【Git分支的使用、Git回退、还原】 下一篇&#xff1a;【已完结】 目录&#xff1a;【Git系列教程-目录大纲】 文章目录 一、远程协作开发1.1 远程仓库简介1.1.1 Github1.1.2 Gitee1.1.3 其他托管平台 1.2 发布远程仓库1.2.1 创建项目1&#xff09; 新…...

Linux:centos7通过yum安装mysql的方法

1. 检查mysql是否安装 yum list installed | grep mysql如果有的话&#xff0c;就全部卸载 yum -y remove 数据库名称2. MySQL依赖libaio&#xff0c;所以先要安装libaio yum search libaio # 检索相关信息 yum install libaio # 安装依赖包3. 下载MySQL Yum Repository 如…...

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参照【算法与数据结构】131、LeetCode分割回文串的思路&#xff0c;需要将IP字符串进行分割&#xff0…...

uniapp点击图片放大预览

阐述 有些时候我们在用uniapp显示图片时&#xff0c;有的不宜全部显示到屏幕上&#xff0c;uniapp提供了一个非常好用的api。 实现方式如下&#xff1a; <template><view class"content"><image class"logo" src"/static/images/a.…...

Java TreeMap

TreeMap 是一个基于 key 有序的 key value 散列表。 map 根据其键的自然顺序排序&#xff0c;或者根据 map 创建时提供的 Comparator 排序不是线程安全的key 不可以存入null底层是基于红黑树实现的 TreeMap 的类结构图&#xff1a; 实现了 NavigableMap 接口&#xff0c;Na…...

ubuntu 内网源如何搭建 —— 筑梦之路

为什么要搭建内网源&#xff1f; 原因&#xff1a;内网开发环境由于其特定原因不能上外网&#xff0c;所以需要本地环境下的内网源来方便开发人员下载安装软件 搭建建议 单独使用一块磁盘来存放源文件或者单独一个目录下&#xff0c;避免混淆。 环境说明 ubuntu 系统 两张…...

测试用例的设计方法(黑盒)

1.基于需求的设计方法 比如针对网易邮箱进行测试&#xff1a;分为功能相关和非功能相关两大类 但是这么设计的话&#xff0c;有无数多个测试用例&#xff0c;我们现在看到的只是一些大概的测试用例&#xff0c;要想设计具体的测试用例&#xff0c;需要用到下面测试用例的方法…...

Shell编程入门--概念、特性、bash配置文件

目录 一、Shell概念1.定义2.分类和使用场景2.1.分类和切换2.2.使用场景 3.特性3.1.文件描述符与输出重定向3.2.历史命令---history3.3.别名 --alias3.4.命令排序执行3.5.部分快捷键3.6.通配符置换 4.脚本规范5.脚本运行方式5.1.bash脚本执行5.2.bash脚本测试 二、bash配置文件1…...

读书笔记:彼得·德鲁克《认识管理》第14章 工作、做工与员工

一、章节内容概述 虽然工作的历史与人类一样久远&#xff0c;但对工作展开系统研究不过是近百年之内的事&#xff0c;并且“做工”&#xff0c;也就是人从事工作&#xff0c;迄今为止仍很少受到 系统关注。然而我们知道&#xff0c;工作和做工不同&#xff0c;工作是客观的“事…...

diffusers库中stable Diffusion模块的解析

diffusers库中stable Diffusion模块的解析 diffusers中&#xff0c;stable Diffusion v1.5主要由以下几个部分组成 Out[3]: dict_keys([vae, text_encoder, tokenizer, unet, scheduler, safety_checker, feature_extractor])下面给出具体的结构说明。 “text_encoder block…...

智慧城市照明为城市节能降耗提供支持继电器开关钡铼S270

智慧城市照明&#xff1a;为城市节能降耗提供支持——以钡铼技术S270继电器开关为例 随着城市化进程的加速&#xff0c;城市照明系统的需求也日益增长。与此同时&#xff0c;能源消耗和环境污染问题日益严重&#xff0c;使得城市照明的节能减排成为重要议题。智慧城市照明系统…...

2026届毕业生推荐的六大AI科研平台推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术于学术写作领域的运用愈发广泛&#xff0c;其关键价值展现于文献检索、数据整理…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具雅

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储&#xff0c;而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码&#xff0c;常规方式只能重新配置连接&#xff0c;效率极低。本项目只作为学习研究使用&#xff0c;不做其他…...

nRF52840 BLE 多服务开发中的 NRF_ERROR_NO_MEM 排查与解决实战

问题现象 在基于 nRF5 SDK 的 Heart Rate 示例上添加自定义 LBS&#xff08;LED Button Service&#xff09;私有服务后&#xff0c;程序启动后立即进入 Fatal Error → System Reset 循环&#xff0c;串口反复打印&#xff1a; textapp: ble_lbs_init failed! Error code 0x0…...

Phi-4-mini-reasoning在运维领域的实战:日志智能分析与故障预警

Phi-4-mini-reasoning在运维领域的实战&#xff1a;日志智能分析与故障预警 1. 运维人员的日志分析困境 凌晨三点&#xff0c;运维工程师小王被刺耳的告警声惊醒。监控系统显示某核心服务响应时间飙升&#xff0c;但面对GB级别的日志文件&#xff0c;他不得不在数百个可能相关…...

COCO数据集常见问题解答:下载慢?解压失败?目录结构不对?

COCO数据集实战避坑指南&#xff1a;从下载到配置的全流程解决方案 当你第一次接触COCO数据集时&#xff0c;可能会被它庞大的规模和复杂的目录结构吓到。作为计算机视觉领域最常用的基准数据集之一&#xff0c;COCO确实为模型训练和评估提供了丰富的资源&#xff0c;但在实际使…...

网暴:存在却无效的公开羞辱性展示

网暴&#xff1a;存在却无效的公开羞辱性展示网络暴力常被笼统地归入“舆论暴力”或“言语攻击”&#xff0c;但其本质长期缺乏精准的理论刻画。如果将暴力重新定义为“不正当且不可对称地剥夺或削弱他人决断能力”&#xff0c;那么网暴便可以获得一个统一且深刻的解释&#xf…...

学生党福利:如何利用学校License免费安装MATLAB RoadRunner并接入Carla

教育用户专属&#xff1a;MATLAB RoadRunner与Carla联动的完整指南 在高校实验室里&#xff0c;仿真工具链的搭建往往让许多同学头疼不已。作为自动驾驶、机器人仿真领域的黄金组合&#xff0c;MATLAB RoadRunner与Carla的配合使用能大幅提升研究效率。但专业软件高昂的授权费…...

【JavaScript高级编程】拆解函数流水线 上壁

一、什么是setuptools&#xff1f; setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你&#xff1a; 定义 Python 包的元数据&#xff08;如名称、版本、作者等&#xff09;。 声明包的依赖项&#xff0c;确保你的包能够正确运行。 构建源代码分发包&…...

TP-Link 多款路由器曝未修复零日漏洞:栈溢出可致远程代码执行,其他漏洞已被实际利用

目前&#xff0c;TP-Link 已确认多款路由器型号存在尚未修复的零日漏洞&#xff0c;同时该品牌其他漏洞已被真实网络攻击利用。 Amazon.com: TP-Link Archer AX10 AX1500 WiFi 6 Router Dual Band 1.5GHz Tri Core CPU TPLink : Electronics 零日漏洞详情与厂商响应 该零日漏…...

手把手教你搭建开源‘零信任’入口:基于FreeIPA和FreeRadius的2FA网关配置全记录

从零构建企业级双因素认证门户&#xff1a;FreeIPAFreeRadius实战指南 当团队规模扩张到20人以上时&#xff0c;分散在各个系统里的账号密码就像散落的拼图——防火墙用一套凭证、内部Wiki用另一套、VPN又是独立的账号体系。每次有新成员加入&#xff0c;运维人员不得不在多个系…...