news 2026/5/3 5:02:46

LeetCode 162.寻找峰值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 162.寻找峰值

思路:

1.题目规定了nums[-1] = nums[n] = -∞,也就是假设nums[0]的左边还有一个-∞,nums[n - 1]的右边还有一个-∞。原因在于这样可以保证数组一定有峰值。比如数组是严格递减的,那么nums[0]就是(唯一的)峰值;同理如果数组是严格递增的,那么nums[n - 1]就是(唯一的)峰值

2.分析:如果i < n - 1且nums[i] < nums[i + 1],那么在下标[i + 1,n - 1]中一定存在峰值(如果不满足,那么一定有nums[i + 1] < nums[i + 2],nums[i + 2] < nums[i + 3],...,nums[n - 1] < nums[n] = -∞,可知不成立,因此在下标[i + 1,n - 1]中一定存在峰值)。同理可知如果i < n - 1且nums[i] > nums[i + 1],那么在下标[0,i]中一定存在峰值

3.因此,可以通过二分的方式,通过比较nums[i]和nums[i + 1]的大小关系,不断地缩小存在峰值的范围,二分找到峰值

4.注意:如果有多个峰值,我们无法在一开始、以及二分过程中就确定哪个峰值最终会成为答案。二分的思路只是不断地缩小范围,并最终找到其中的一个峰值。由于每次只关注mid和mid + 1的局部大小关系,然后根据这个局部信息决定是向左还是向右。不同的数组初始状态会导致算法走向不同的峰值。因此得到的峰值不一定是全局最高峰

5.复杂度分析:

(1)时间复杂度:O(logn),其中n为nums的长度。

(2)空间复杂度:O(1)。

附代码:

class Solution { public int findPeakElement(int[] nums) { int left = 0; int right = nums.length - 1; // 闭区间[0,n - 1] while (left < right) { // 此时区间至少还有两个元素 int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) { // 下坡,峰顶位置 <= mid right = mid; } else { // 上坡,峰顶位置 >= mid + 1 left = mid + 1; } } return left; } }

ACM模式:

import java.util.Scanner; class Solution { public int findPeakElement(int[] nums) { int left = 0; int right = nums.length - 1; // 闭区间[0, n - 1] while (left < right) { // 此时区间至少还有两个元素 int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) { // 下坡,峰顶位置 <= mid right = mid; } else { // 上坡,峰顶位置 >= mid + 1 left = mid + 1; } } return left; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取数组长度 int n = scanner.nextInt(); // 读取数组元素 int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = scanner.nextInt(); } // 寻找峰值元素 Solution solution = new Solution(); int result = solution.findPeakElement(nums); System.out.println(result); scanner.close(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 4:56:31

本地大模型部署实战:从Hollama工具入门到私有化AI应用构建

1. 项目概述&#xff1a;一个轻量化的本地大模型推理工具最近在折腾本地AI应用的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫fmaclen/hollama。乍一看名字&#xff0c;可能会联想到另一个知名的本地大模型工具Ollama。没错&#xff0c;这个项目可以看作是Ollama的…

作者头像 李华
网站建设 2026/5/3 4:52:28

OpenClaw离线包:零配置部署AI代理的Windows解决方案

1. 项目概述&#xff1a;为什么我们需要一个“开箱即用”的AI工具包&#xff1f; 如果你是一个Windows用户&#xff0c;并且对AI驱动的自动化工具感兴趣&#xff0c;那么OpenClaw这个名字你可能已经听说过。它是一个功能强大的AI代理框架&#xff0c;能够帮你处理各种重复性任务…

作者头像 李华
网站建设 2026/5/3 4:51:03

百度网盘直链解析终极指南:告别限速,实现高速下载

百度网盘直链解析终极指南&#xff1a;告别限速&#xff0c;实现高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘100KB/s的龟速下载而烦恼吗&#xff1…

作者头像 李华
网站建设 2026/5/3 4:50:07

终极免费方案:快速修复机械键盘连击问题的完整指南

终极免费方案&#xff1a;快速修复机械键盘连击问题的完整指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 还在为键盘按键自动重复而…

作者头像 李华
网站建设 2026/5/3 4:48:17

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用

1. 为树莓派CM4 IO板扩展PCIe接口的实用方案 作为一名长期折腾树莓派的老玩家&#xff0c;我最近测试了Waveshare推出的PCIe-Packet-Switch-4P扩展板。这个仅信用卡大小的板子&#xff0c;通过ASMedia ASM1184e芯片&#xff0c;将树莓派CM4的单通道PCIe Gen2接口扩展为四个PCIe…

作者头像 李华