算法---最大加号标志
题目
在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0
返回 grid 中包含 1 的最大的 轴对齐 加号标志的阶数 。如果未找到加号标志,则返回 0 。
一个 k 阶由 1 组成的 “轴对称”加号标志 具有中心网格 grid[r][c] == 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由 1 组成的臂。注意,只有加号标志的所有网格要求为 1 ,别的网格可能为 0 也可能为 1 。
示例 1:
输入: n = 5, mines = [[4, 2]]
输出: 2
解释: 在上面的网格中,最大加号标志的阶只能是2。一个标志已在图中标出。
示例 2:
输入: n = 1, mines = [[0, 0]]
输出: 0
解释: 没有加号标志,返回 0 。
提示:
1 <= n <= 500
1 <= mines.length <= 5000
0 <= xi, yi < n
每一对 (xi, yi) 都 不重复
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-plus-sign
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解决方法
fun orderOfLargestPlusSign(n: Int, mines: Array<IntArray>): Int {//左上右下var dp = Array(n) { Array(n) { Array(4) { 0 } } }var matrix = Array(n) { Array(n) { 1 } }for (mine in mines) {matrix[mine[0]][mine[1]] = 0}//左上for (i in matrix.indices) {for (j in matrix[0].indices) {if (matrix[i][j] == 1) {dp[i][j][0] = if (j - 1 >= 0) dp[i][j - 1][0] + 1 else 1dp[i][j][1] = if (i - 1 >= 0) dp[i - 1][j][1] + 1 else 1}}}//右下for (i in n - 1 downTo 0) {for (j in n - 1 downTo 0) {if (matrix[i][j] == 1) {dp[i][j][2] = if (j + 1 < n) dp[i][j + 1][2] + 1 else 1dp[i][j][3] = if (i + 1 < n) dp[i + 1][j][3] + 1 else 1}}}var result = 0dp.forEachIndexed { i, arrays ->arrays.forEachIndexed { j, _ ->result = result.coerceAtLeast((dp[i][j][0]).coerceAtMost(dp[i][j][1]).coerceAtMost(dp[i][j][2]).coerceAtMost(dp[i][j][3]))}}return result}
思路:我们对数组中每一个位置,我们知道他的上下左右四个范围最长的连续1的个数之后
我们取最短的边长就是这个位置的答案
最后我们遍历dp数组就可以得到结果
总结
1.迄今为止 对于中等题 我做算法对自己的思路最满意的一次
思路和官方题解一模一样 虽然可能存在优一点点化空间
对自己写算法也是最满意的一次
基本上不用调试 几次就过了
果然是皇天不负有心人!
2.复制粘贴的代码 越是容易有问题 记得多检查几遍
算法---最大加号标志相关推荐
- LeetCode 764. 最大加号标志(DP)
文章目录 1. 题目 2. 解题 1. 题目 在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1.网格中包含 ...
- leetcode - 764. 最大加号标志
764. 最大加号标志 -------------------------------------------- 在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 ...
- 开源目标检测算法用于交通标志检测全方位评估
(欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 交通标志检测在自动驾驶.汽车主动安全中应用非常重要,通用的目标检测算法可以通过微调网络的方式直接用于交通标志检测. ...
- 力扣解法汇总764. 最大加号标志
目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...
- LeetCode第 764 题:最大加号标志(C++)
764. 最大加号标志 - 力扣(LeetCode) 题目读懂都需要点时间 和LeetCode第 221 题:最大正方形(C++)_zj-CSDN博客有点类似,但是如果以某个点为+的中心考虑dp的话, ...
- 764. 最大加号标志
这道题看起来题目挺唬人的,其实和机器人走方格时一道题,只是状态转移方程不同. 我开始打算用递归写,每个节点寻求其四个方向上的节点的加号标志,这样的话会形成无线递归,用矩阵的四个边界根本封不住,类似于a ...
- Java实现 LeetCode 764 最大加号标志(暴力递推)
764. 最大加号标志 在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1.网格中包含 1 的最大的轴对齐加号 ...
- 764、最大加号标志
在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1.mines[i] = [xi, yi]表示 grid[xi][yi] == 0 返回 gr ...
- leetcode算法题--最大加号标志★
原题链接:https://leetcode-cn.com/problems/largest-plus-sign/ 动态规划 dp[i][j]表示从上下左右四个方向到[i,j]这个点的最小累积 状态转移 ...
最新文章
- HDU 5834 Magic boy Bi Luo with his excited tree
- Leaf:美团分布式ID生成服务开源
- windows redis批量删除前缀的key_阿里官方Redis开发规范!
- mysql Slave is not configured or failed to initialize properly. You must at least set --server-id
- 警惕同学录联系信息等泄露!
- COMSOL6.0软件安装说明+视频教程
- python 入门学习,52周存钱挑战
- 看了这个教程,学会快速找出三等分点
- oracle查找隐藏字符串,oracle chr(0) 隐藏字符串
- 树梅派-人脸识别菜鸡起步
- java svg png_java batik svg转png报错,球大神!!!在线等
- 计算机英语感想1500,英语教学的心得体会1500字
- P5837 [USACO19DEC]Milk Pumping G
- H5视频打赏3.0已更新完整演示
- 北科大计算机实践报告,计算机应用实践报告_北科大.doc
- 三菱变频空调噪声大维修案例分析
- 中国高智商协会(胜寒) 入会智商考试热身题答案
- 图——图的存储结构(邻接矩阵和邻接表法)
- easyExcel 填写导出转换日期格式
- 虚拟化技术:实现资源高效利用和灵活管理的利器
热门文章
- 记录解决问题--GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码
- 苏州超级计算机叫什么,苏州超级计算机中心正式揭牌
- Linux显存占用无进程清理方法
- Web项目部署到云服务器中—保姆级教程
- 2021年制冷与空调设备运行操作试题及解析及制冷与空调设备运行操作模拟考试题
- cuda和对应英伟达显卡驱动下载
- 简易小说爬虫显示器的不同语言实现示例(Python-tkinter-wxpython-pyqt5-Flask,Java,C,C++,C#,Lua,Go,Kotlin,HTML,JS,VB,PHP,R)
- 1452-Cannot add or update a child row: a foreign key constraint fails
- 【原创】MATLAB/Simulink再生制动模型/制动能量回收模型
- 诺基亚手机有多少个系列?