文章目录

  • 1. 题目
  • 2. 解题

1. 题目

一个 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] <= 10^5
任意两个相邻元素均不相等.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-a-peak-element-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 对行进行二分查找,找到中行 mid, 及其上下两行,每行的最大值
  • 如果 mid 行最大值 >= 相邻两行的,则找到了顶峰
  • 否则,二分查找较大的一侧,顶峰元素肯定存在
class Solution {public:vector<int> findPeakGrid(vector<vector<int>>& mat) {int m = mat.size(), n = mat[0].size();int l = 0, r = m-1, mid;int u, v, w, idx;vector<int> res;while(l <= r){mid = (l+r)>>1;res = getmax(mat, mid, m, n);u = res[0], idx = res[1];res =  getmax(mat, mid-1, m, n);v = res[0];res =  getmax(mat, mid+1, m, n);w = res[0];if(u>=v && u>=w) return {mid, idx};else if(v >= u)r = mid-1;elsel = mid+1;}return {-1, -1};}vector<int> getmax(vector<vector<int>>& mat, int r, int m, int n){if(r < 0 || r >= m) return {-1, -1};int maxv = -1, idx = -1;for(int i = 0; i < n; ++i){if(maxv < mat[r][i]){idx = i;maxv = mat[r][i];}}return {maxv, idx};}
};

144 ms 45.2 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1901. 找出顶峰元素 II(二分查找)相关推荐

  1. 59. Leetcode 81. 搜索旋转排序数组 II(二分查找-局部有序)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同.在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使 ...

  2. leetcode 81. 搜索旋转排序数组 II(二分查找)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 , ...

  3. 给定一个由0和1组成的矩阵,找出每个元素到最近的0的距离

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. (Leetcode 542) 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出 0 ...

  4. LeetCode 2058. 找出临界点之间的最小和最大距离

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   链表中的 临界点 定义 ...

  5. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小

    7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则返回最小的下标) 题目 题目描述 ...

  6. Java黑皮书课后题第7章:7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值

    7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值 题目 题目描述与运行示例 破题 代码 ...

  7. 约瑟夫环——递推公式详解(leetcode 1823. 找出游戏的获胜者)

    约瑟夫环--递推公式详解(leetcode 1823. 找出游戏的获胜者) 约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围. ...

  8. LeetCode 1823. 找出游戏的获胜者

    LeetCode 1823. 找出游戏的获胜者 文章目录 LeetCode 1823. 找出游戏的获胜者 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂度 3.代码示例 2.知识点 ...

  9. 实验4.1对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 。 要求: 1)数组有10个元素; 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息; 3)输出时,首先输出数组

    /*SY4.1 题目描述 对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 . 要求: 1)数组有10个元素: 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息: 3)输出 ...

最新文章

  1. 《自然》 脑机接口新突破 人脑信号转文本准确率达97%
  2. 以Attribute加上Header验证
  3. 2018智能反欺诈洞察报告:黑中介、黑产智能化趋势明显
  4. python 漂亮界面demo_在这个什么都看脸的时代,如何用 GUI 提高 python 程序的颜值?...
  5. C语言的soap报文处理转义字符,webservice传递特殊字符时的解决办法
  6. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案
  7. extract()和extact_first()的区别
  8. 剑指Offer:面试题31——连续子数组的最大和(java实现)
  9. 同一批人做的产品,一年跟十年,产品质量不会有任何变化
  10. 无线路由器网络测试软件,简单快速测试家里无线路由器的网速和性能
  11. 基于Springboot+vue的办公OA系统#毕业设计
  12. 每日一练_13 :java设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声(使用接口)。
  13. springboot自定义start解析(start中配置从数据源)
  14. C语言实现推箱子游戏完整代码
  15. WORD表格合并EXCEL表格格式错乱
  16. 安装CAD缺少html,Win10系统安装CAD2007失败缺少.NET组件如何解决
  17. ZZULIOJ:1091: 童年生活二三事(多实例测试)
  18. Moran_DeepLPF_Deep_Local_Parametric_Filters_for_Image_Enhancement_CVPR_2020_paper
  19. android百度车载导航,百度CarLife车机端
  20. vue之动画( 仿jquery的slideToggle动画效果 )

热门文章

  1. dto 是只给前端需要的数据吗_DO、VO、DTO...XXOO,你弄明白了么
  2. kail中tools的安装和第一个php学习笔记
  3. 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
  4. mysql集群怎么实现状态机_分布式中的状态机
  5. 前端模块化(二):模块化编程
  6. JSON.parse和JSON.stringify 参数详解
  7. imagick用法!
  8. thinkpad s3 安装win8 kali双系统笔记
  9. sql server :distinct 与order by 一起使用要注意
  10. 基础算法学习(二)_二叉树及应用赫夫曼编码