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

LeetCode 分类刷题:1901. 寻找峰值 II

题目

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

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

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

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

解析

利用行最大值判断峰顶位置

我们可以二分包含峰顶的行号 i:

  • 如果 mat[i] 的最大值比它下面的相邻数字小,则存在一个峰顶,其行号大于 i。缩小二分范围,更新二分区间左端点 left。
  • 如果 mat[i] 的最大值比它下面的相邻数字大,则存在一个峰顶,其行号小于或等于 i。缩小二分范围,更新二分区间右端点 right。

对于本题,如果每次二分,都是 mat[i] 的最大值比它下面的相邻数字小,那么最后会判断出峰顶行号大于 m−2,此时可以直接确定最后一行必然包含峰顶

这意味着 m−1 不需要在初始二分范围内初始二分范围为 [0,m−2]在这个范围中二分,如果每次都更新的是区间左端点 left,那么最后得到的二分结果必然是 m−1

如果在 [0,m−1] 中二分,还需要额外判断 i+1 是否越界。在 [0,m−2] 中二分可以避免越界判断。

作者:灵茶山艾府
链接:https://leetcode.cn/problems/find-a-peak-element-ii/solutions/2571587/tu-jie-li-yong-xing-zui-da-zhi-pan-duan-r4e0n/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

答案

class Solution:def findPeakGrid(self, mat: List[List[int]]) -> List[int]:left, right = -1, len(mat) - 1while left + 1 < right:i = (left + right) // 2mx = max(mat[i])if mx > mat[i + 1][mat[i].index(mx)]:right = i  # 峰顶行号 <= ielse:left = i  # 峰顶行号 > ireturn [right, mat[right].index(max(mat[right]))]# 作者:灵茶山艾府
# 链接:https://leetcode.cn/problems/find-a-peak-element-ii/solutions/2571587/tu-jie-li-yong-xing-zui-da-zhi-pan-duan-r4e0n/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

时间复杂度:O(nlogm),其中 m 和 n 分别为 mat 的行数和列数。需要二分 O(logm) 次,每次二分需要 O(n) 的时间寻找 mat[i] 最大值的下标。
空间复杂度:O(1)。仅用到若干额外变量。

作者:灵茶山艾府
链接:https://leetcode.cn/problems/find-a-peak-element-ii/solutions/2571587/tu-jie-li-yong-xing-zui-da-zhi-pan-duan-r4e0n/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.dtcms.com/a/453212.html

相关文章:

  • ROS实战中Gazebo的基本使用
  • wordpress网站维护教程wordpress修改管理密码
  • PTA6-1 使用函数求最大公约数(C)
  • 小谈:数字化项目立项成功的方法论
  • HTTPS 真的牢不可破吗?—— 中间人攻击与安全机制解析
  • 广东省城乡建设厅网站seo短视频新地址在哪里?
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 9--基础知识 5--常用函数 3
  • 然后在亚马逊网站上做外贸做网站需要做数据库
  • 接口测试-Postman 断言
  • 网站关键词更换了专业网站建设 公司哪家好
  • 乐观锁 与 悲观锁 笔记251007
  • Linux中select的实现
  • /UI2/CL_JSON=>DESERIALIZE :JSON反序列化
  • MySQL主主复制+Keepalived高可用集群搭建与故障切换实战
  • 幼儿网站源代码室内设计案例去什么网站
  • Spring Framework源码解析——BeanFactoryAware
  • Linux系统--进程通信初解
  • 企业网站如何建设报告jsp简述网站开发流程
  • VS2022创建项目工程笔记
  • 【学习笔记05】C++11新特性学习总结(下)
  • RNN、LSTM与GRU模型
  • 基于华为云IOT设计的粮仓环境监测系统_303
  • 天津做网站企业保险公司网站策划
  • Linux-> TCP 编程2
  • 视频批量混剪、批量拼接,维多快剪-批量创作插件使用说明
  • JAVA算法练习题day30
  • 网站怎么做平台长沙官网制作
  • 做网站分前台后端吗怎样做一个网站平台
  • C++:异常处理与智能指针实战指南
  • 做芯片外贸生意上哪个网站深圳高端做网站公司