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

162. 寻找峰值

https://leetcode.cn/problems/find-peak-element/?envType=study-plan-v2&envId=top-interview-150

思路:
方法一:读完题后我最先想到的解法是单调栈,我们维护一个递增的单调栈,栈顶元素一定是最大的,当出现要弹栈操作是就说明栈顶就是“山峰”。

    public int findPeakElement(int[] nums) {Stack<Integer> st = new Stack<>(); // 递增栈int cnt = 0;// 维护栈的单调性while(cnt < nums.length && (st.isEmpty() || st.peek() <= nums[cnt])) {st.push(nums[cnt++]);}return cnt-1;}

方法二:这题是在二分栏目下的嘛,我们可以使用二分,想必一开始大家看到的时候其实很难和二分联系起来(因为二分的前提是有序),给的nums显然是无序的,但是我们再思考一下就可以发现要求我们返回的答案是下标,而下标肯定是有序递增的,所以我们可以二分答案,然后判断这个下标来移动l或r。

我的判断是:如果nums[mid]>nums[mid+1],说明l到mid之间一定存在山峰,所以r=mid,反之l=mid+1。
tip:对于方法二我一开始还有些疑惑因为对于单调递增的情况不存在山峰但是也会返回一个下标,后来测试那试了以下就是拿最大值当的山峰。

    public int findPeakElement(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] > nums[mid + 1]) { // l到mid之间一定存在山峰right = mid;} else { // mid+1到r之间一定存在山峰left = mid + 1;}}return left;}

http://www.xdnf.cn/news/9006.html

相关文章:

  • 【芯片设计中的跨时钟域信号处理:攻克亚稳态的终极指南】
  • Rust 1.0 发布十周年,梦想再度扬帆起航!
  • Class ‘AlibabaCloud\Tea\Utils\Utils\RuntimeOptions‘ not found
  • 人脸识别备案快速高效服务
  • 有效的字母异位符--LeetCode
  • 2025年5月架构真题回忆
  • SQL连接字符串的差异造成远程服务器不能正常连接
  • 数据库入门教程:以商品订单系统为例
  • 篇章四 数据结构——顺序表
  • 代码随想录算法训练营第60期第四十八天打卡
  • 010501上传下载_反弹shell-渗透命令-基础入门-网络安全
  • 《棒球百科》国家一级运动员和二级运动员的区别·棒球1号位
  • 【bug排查记录】由Redission配置引发的Satoken血案
  • Nginx 核心功能深度解析:负载均衡、缓存加速与安全防护
  • Structure-Revealing Low-Light Image Enhancement Via Robust Retinex Model论文阅读
  • 如何最简单、通俗地理解Pytorch?神经网络中的“梯度”是怎么自动求出来的?PyTorch的动态计算图是如何实现即时执行的?
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图像分割技术的实现与比较分析
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • DHCPig:使用 scapy 网络库的 DHCP 耗尽脚本!全参数详细教程!Kali Linux教程!
  • 数据治理进阶:数据治理基础概念解释【附全文阅读】
  • sqli-labs第二十六关——Trick with commentspace
  • Python-numpy中常用的统计函数及转换函数
  • 通俗理解线性与非线性、时变与时不变系统,和数值不稳定性机制
  • 内存管理 : 03多级页表和快表
  • MCP 协议结合大模型使用浅讲
  • 【解读—论文】引导性掩码表示学习以捕捉心电图的时空关系
  • 2025/5/25 学习日记 linux进阶命令学习
  • ISO 20000体系:服务请求管理、问题管理、事件管理区别与联系
  • 基于云的内容中台核心优势是什么?