news 2026/4/16 15:05:44

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/4/16 3:25:17

Steam库存智能管理工具深度解析

Steam库存智能管理工具深度解析 【免费下载链接】Steam-Economy-Enhancer 中文版&#xff1a;Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer 在数字游戏经济的浪潮中&#xff0c;Steam平台已成…

作者头像 李华
网站建设 2026/4/16 9:25:29

PaddleOCR-VL技术详解:动态分辨率处理的优势分析

PaddleOCR-VL技术详解&#xff1a;动态分辨率处理的优势分析 1. 技术背景与核心价值 随着数字化进程的加速&#xff0c;文档解析在金融、教育、政务等领域的应用日益广泛。传统OCR技术多依赖于固定分辨率输入和分步处理流程&#xff08;如检测→识别→结构化&#xff09;&…

作者头像 李华
网站建设 2026/4/16 9:21:02

DataHub数据治理平台探索实践:从概念认知到深度应用

DataHub数据治理平台探索实践&#xff1a;从概念认知到深度应用 【免费下载链接】datahub 项目地址: https://gitcode.com/gh_mirrors/datahub/datahub 在现代数据驱动的商业环境中&#xff0c;高效的数据治理已成为企业成功的关键因素。DataHub作为LinkedIn开源的现代…

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

ERNIE 4.5超进化:2卡GPU轻松驱动300B大模型

ERNIE 4.5超进化&#xff1a;2卡GPU轻松驱动300B大模型 【免费下载链接】ERNIE-4.5-300B-A47B-2Bits-TP2-Paddle 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-300B-A47B-2Bits-TP2-Paddle 导语&#xff1a;百度ERNIE 4.5推出革命性的2Bits量化版本&a…

作者头像 李华
网站建设 2026/4/15 10:18:27

Kimi-VL-A3B-Thinking-2506:4倍像素智能省Token多模态模型

Kimi-VL-A3B-Thinking-2506&#xff1a;4倍像素智能省Token多模态模型 【免费下载链接】Kimi-VL-A3B-Thinking-2506 这是 Kimi-VL-A3B-Thinking 的更新版本&#xff0c;具备以下增强能力&#xff1a; 思考更智能&#xff0c;消耗更少 Token&#xff1a;2506 版本在多模态推理基…

作者头像 李华
网站建设 2026/4/15 21:25:49

Vue3+Element Plus后台模板:快速构建企业级管理系统的完整指南

Vue3Element Plus后台模板&#xff1a;快速构建企业级管理系统的完整指南 【免费下载链接】admin-element-vue vue3.x Element ui Admin template (vite/webpack) 项目地址: https://gitcode.com/gh_mirrors/ad/admin-element-vue 还在为每次开发后台系统都要重复搭建基…

作者头像 李华