LeetCode 1901. 找出顶峰元素 II(二分查找)

文章目录

    • 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]
解释: 34都是顶峰元素,所以[1,0][0,1]都是可接受的答案。

示例 2:
在这里插入图片描述

输入: mat = [[10,20,15],[21,30,14],[7,16,32]]
输出: [1,1]
解释: 3032都是顶峰元素,所以[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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tracing mysqld Using DTrace

http://dev.mysql.com/doc/refman/5.6/en/dba-dtrace-server.html转载于:https://www.cnblogs.com/zengkefu/p/4900476.html

LeetCode 2085. 统计出现过一次的公共字符串(哈希)

文章目录1. 题目2. 解题1. 题目 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 ["leetcode","is","amazing","as",&q…

php表白页面,2020情人节表白页面(代码分享)

趁此单身汪伤心之日&#xff0c;作为一名前端程序猿的我也按捺不住了&#xff0c;撸个表白页面送给广大想表白的人儿。话不多说&#xff0c;先看效果(网页地址)&#xff1a;功能一个网页输入名称&#xff0c;生成带参数的网址。浏览器输入该网址&#xff0c;即可打开带有该名字…

matlab玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function plot_rosedraw_main(450,90);function draw_main(x,y)%粉红色玫瑰arcdata{1}[65 -60 150 350 866 -54 300 470 865 -56 30 230 1064 -57 300 490 17];ellipsedata{1}[73 -30 250 450 27 4059 -30 100 290 27 4065 -40 140…

设计类职业

设计类分&#xff1a; 1、视觉&#xff08;2D 3D 2、声音 3、活动 很多时候是三种组合在一起&#xff0c;伴随不同行业延伸发展。 八类设计人才成职场红人 由于人才紧缺&#xff0c;以下八类设计人才已成为职场红人&#xff0c;未来发展前景看好。 1、产品设计师 工业生产型企业…

LeetCode 2086. 从房屋收集雨水需要的最少水桶数(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 street 。street 中每个字符要么是表示房屋的 ‘H’ &#xff0c;要么是表示空位的 ‘.’ 。 你可以在 空位 放置水桶&#xff0c;从相邻的房屋收集雨水。 位置在 i - 1 或者 i 1 的水桶可以收集位置为 i 处房…

LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的网格图&#xff0c;其中 (0, 0) 是最左上角的格子&#xff0c;(m - 1, n - 1) 是最右下角的格子。 给你一个整数数组 startPos &#xff0c;startPos [startrow, startcol] 表示 初始 有一个 机器人 在格子 (startrow, start…

PAM+4+matlab,基于PAM4调制的400G光模块

PAM4是400G光模块的主要调制方式&#xff0c;有多模和单模两种类型。基于PAM4调制的400G光模块电口侧以8x50G PAM4调制&#xff0c;光口侧则有8x50G PAM4和4x100G PAM4两种调制类型。多模光模块400G多模光模块常见的有SR8和SR4.2接口&#xff0c;皆使用8x50G PAM4调制。400G SR…

LeetCode 2089. 找出数组排序后的目标下标

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。 目标下标 是一个满足 nums[i] target 的下标 i 。 将 nums 按 非递减 顺序排序后&#xff0c;返回由 nums 中目标下标组成的列表。 如果不存在目标下标&#xff0c;返回一…

DJANGO,获取当前用户名,用户组名,用户组权限

样例&#xff0c;为下一步自定义用户权限作一下代码准备&#xff1a; def get_context_data(self, **kwargs):if self.request.user.is_authenticated():current_user_set self.request.userprint current_user_setcurrent_group_set Group.objects.get(usercurrent_user_set…

php 获取js对象的属性值,js获取对象,数组所有属性键值(key)和对应值(value)的方法示例...

本文实例讲述了js获取对象,数组所有属性键值(key)和对应值(value)的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;var valuesfunction(object) {var values [];for (var property in object)values.push(object[property]);return values;}//写成标准的方法(数…

LeetCode 2090. 半径为 k 的子数组平均值(滑窗)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的数组 nums &#xff0c;数组中有 n 个整数&#xff0c;另给你一个整数 k 。 半径为 k 的子数组平均值 是指&#xff1a;nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有元素的平均值&#xff0c;即下标在 i …

大龄屌丝自学笔记--Java零基础到菜鸟--036

GUI&#xff1a;继承体系、事件监听机制、适配器模型、Netbeans 1、继承体系 2、事件监听机制 事件源--事件定义&#xff08;接口&#xff09;--事件处理&#xff08;实现类&#xff09;--事件监听 3、适配器模型 接口&#xff08;很多方法&#xff09;--抽象适配器类&#xff…

LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的数组 nums &#xff0c;数组由若干 互不相同 的整数组成。 nums 中有一个值最小的元素和一个值最大的元素。分别称为 最小值 和 最大值 。你的目标是从数组中移除这两个元素。 一次 删除 操作定义为从数组的 前面 移除…

php怎么获取分类数,php 两种获取分类树的方法

php 两种获取分类树的方法1./*** 获取分类树* param array $array 数据源* param int $pid 父级ID* param int $level 分类级别* return string*/function getCategory($array, $pid 0, $level 0){//声明静态数组,避免递归调用时,多次声明导致数组覆盖static $list [];foreac…

Java中正数与负数操作、的区别

以下为个人理解&#xff0c;有不对的地方请提出 Java中&#xff0c;>>、>>>都是在数字的二进制的补码中进行的 正数的补码为本身 如33的二进制表示为 00000000 00000000 00000000 00100001 补码为 00000000 00000000 00000000 00100001 负数的补码为符号位即最高…

LeetCode 2092. 找出知晓秘密的所有专家(并查集)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示有 n 个专家从 0 到 n - 1 编号。 另外给你一个下标从 0 开始的二维整数数组 meetings &#xff0c;其中 meetings[i] [xi, yi, timei] 表示专家 xi 和专家 yi 在时间 timei 要开一场会。 一个专家可以同时参加…

Core Data系列三——基本使用

本文分两个部分&#xff0c;第一部分为使用Xcode IDE来建立data model以及nsmanagedobject subclass, 第二部分为代码中对数据库进行CURD的操作 Xcode操作步骤 创建Data Model: New File->iOS->Core Data->Data Model 建立entity建立entity的attribute建立entity之间的…

matlab仿真模拟随机过程,基于MATLAB的随机过程仿真.pdf

基于MATLAB的随机过程仿真.pdf< YSPRACTICE 系统实践基于MATLAB的随机过程仿真◆陈建华 彭淑燕 王 伟 李海燕摘要&#xff1a;为了改善随机过程课程教学中存在的数学概念抽象难懂&#xff0c;学生理解不透彻的情况&#xff0c;将基于MATLAB的随机过程仿真引入到教学中。根据…

python web开发 HTML基础

文章目录1. 简介2. 标签元素属性3. 表格4. 列表ol 有序ul 无序自定义列表5. 表单输入域标记 input选择域标记 select, option文字域标记 textarea6. 综合练习learning from 《python web开发从入门到精通》 1. 简介 HTML 是描述网页的一种标记语言&#xff0c;Hyper Text Mar…