news 2026/8/23 4:43:07

day129—二分算法—寻找峰值Ⅱ(LeetCode-1901)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day129—二分算法—寻找峰值Ⅱ(LeetCode-1901)

题目描述

一个 2D 网格中的峰值是指那些严格大于其相邻格子(上、下、左、右)的元素。

给你一个从 0 开始编号m x n矩阵mat,其中任意两个相邻格子的值都不相同。找出任意一个 峰值mat[i][j]返回其位置[i,j]

你可以假设整个矩阵周边环绕着一圈值为-1的格子。

要求必须写出时间复杂度为O(m log(n))O(n log(m))的算法

示例 1:

输入:mat = [[1,4],[3,2]]输出:[0,1]解释:3 和 4 都是峰值,所以[1,0]和[0,1]都是可接受的答案。

示例 2:

输入:mat = [[10,20,15],[21,30,14],[7,16,32]]输出:[1,1]解释:30 和 32 都是峰值,所以[1,1]和[2,2]都是可接受的答案。

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 500
  • 1 <= mat[i][j] <= 105
  • 任意两个相邻元素均不相等.

解决方案:

这段代码的核心功能是在二维矩阵中找到任意一个峰值元素的坐标(峰值定义为大于其上下左右相邻元素,边界元素只需大于所有存在的相邻元素),采用「行维度二分查找 + 每行找最大值」的策略,时间复杂度为O(m log n)m为列数,n为行数),是高效的二维峰值查找解法。

核心逻辑

代码利用二维峰值的特性 —— 若某行的最大值小于其下一行同列元素,则峰值必在下方行;反之则峰值必在当前行或上方行,以此缩进行范围:

  1. 行维度二分:初始化开区间(left=-1, right=行数-1),循环缩小区间(条件left+1<right);
  2. 每行定位最大值:对二分中点行mid,找到该行最大值的列索引j(这个位置是该行内最可能成为峰值的点);
  3. 缩进行范围:比较mat[mid][j]mat[mid+1][j]:若当前行最大值更大,说明峰值在mid及上方行,将right=mid;否则峰值在mid下方行,将left=mid
  4. 确定结果:循环结束时right指向峰值所在行,找到该行最大值的列索引,组合成坐标返回。

总结

  1. 核心思路:将二维峰值查找简化为「行维度二分 + 每行找最大值」,把二维问题降维为一维二分问题;
  2. 关键设计:利用 “每行最大值” 缩小列范围,再通过二分缩小行范围,开区间二分法简化边界处理;
  3. 效率保障:每行找最大值是O(m),行二分是O(log n),整体效率远优于暴力遍历所有元素。

函数源码:

class Solution { public: int indexOfMax(vector<int>& a) {//这一行内最大值的索引 return ranges::max_element(a) - a.begin(); } vector<int> findPeakGrid(vector<vector<int>> &mat) { int left = -1, right = mat.size() - 1; while (left + 1 < right) { int mid = left + (right - left) / 2; int j = indexOfMax(mat[mid]); (mat[mid][j] > mat[mid + 1][j] ? right : left) = mid; } return {right, indexOfMax(mat[right])}; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 13:27:44

DeepSeek-R1-Distill-Qwen-1.5B为何输出\n\n?思维链修复教程

DeepSeek-R1-Distill-Qwen-1.5B为何输出\n\n&#xff1f;思维链修复教程 1. 背景与问题定义 在部署和使用轻量级大语言模型的过程中&#xff0c;开发者常会遇到模型输出异常的问题。其中&#xff0c;DeepSeek-R1-Distill-Qwen-1.5B作为一款面向边缘设备优化的蒸馏模型&#x…

作者头像 李华
网站建设 2026/8/22 9:54:18

Proteus 8.9 Win11兼容安装教程:实战演示全流程

如何在 Windows 11 上成功安装 Proteus 8.9&#xff1f;一文讲透兼容性难题与实战部署 你有没有遇到过这种情况&#xff1a;手头有个老项目必须用 Proteus 8.9 打开&#xff0c;可你的电脑已经升级到 Win11&#xff0c;结果点开安装包就报错“无法写入”或直接闪退&#xff1f;…

作者头像 李华
网站建设 2026/8/19 4:13:20

从Qwen到DeepSeek-R1:模型蒸馏带来的性能飞跃

从Qwen到DeepSeek-R1&#xff1a;模型蒸馏带来的性能飞跃 1. 引言 1.1 技术背景与演进路径 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;在自然语言理解、代码生成和数学推理等任务上取得了显著进展。然而&#xff0c;随着模型参数量的不断增长&#xff0c;部署…

作者头像 李华
网站建设 2026/8/22 13:30:24

DeepSeek-R1部署教程:边缘计算场景

DeepSeek-R1部署教程&#xff1a;边缘计算场景 1. 引言 随着人工智能模型规模的不断增长&#xff0c;大模型在云端推理中表现出色&#xff0c;但在隐私保护、低延迟响应和离线可用性方面面临挑战。边缘计算场景下&#xff0c;对轻量化、高效率且具备强逻辑推理能力的本地化模…

作者头像 李华
网站建设 2026/8/19 14:03:24

免费高效的语音理解方案|SenseVoice Small镜像支持多语言与批量处理

免费高效的语音理解方案&#xff5c;SenseVoice Small镜像支持多语言与批量处理 1. 背景与技术价值 在当前AI驱动的语音交互场景中&#xff0c;高效、精准且功能丰富的语音理解系统正成为智能客服、内容创作、会议记录等应用的核心组件。传统的语音识别&#xff08;ASR&#…

作者头像 李华
网站建设 2026/8/19 14:02:02

视觉语音文本一体化处理|AutoGLM-Phone-9B多模态能力深度应用

视觉语音文本一体化处理&#xff5c;AutoGLM-Phone-9B多模态能力深度应用 1. AutoGLM-Phone-9B 多模态模型的技术定位与核心价值 随着移动智能设备对实时感知与交互能力的需求日益增长&#xff0c;传统单模态语言模型在复杂场景下的局限性逐渐显现。AutoGLM-Phone-9B 作为一款…

作者头像 李华