程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

1. 题目

给定一个方阵,其中每个单元(像素)非黑即白。
设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。

返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。
若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。
若无满足条件的子方阵,返回空数组。
在这里插入图片描述

matrix.length == matrix[0].length <= 200

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

2. 解题

类似题目:LeetCode 1139. 最大的以 1 为边界的正方形(DP)

  • 求得每个坐标位置处的 上方、左侧 连续的0 有多少个
  • 从右下角开始遍历每个位置,每个点的初始边长edge取 min(上、左)
  • 检测另外两条边是不是也 >= edge
class Solution {
public:vector<int> findSquare(vector<vector<int>>& mat) {if(mat.size()==0 || mat[0].size() == 0)return {};int m = mat.size(), n = mat[0].size(), i, j, k;vector<vector<int>> sumof0Up(m, vector<int>(n,0));//向上连续0个数vector<vector<int>> sumof0Left(m, vector<int>(n,0));//向左连续0个数for(i = 0; i < m; i++){for(j = 0; j < n; j++){if(mat[i][j] == 0){if(i==0 && j==0)sumof0Left[i][j] = 1, sumof0Up[i][j] = 1;else if(i==0 && j>0){sumof0Left[i][j] = sumof0Left[i][j-1]+1;sumof0Up[i][j] = 1;}else if(j==0 && i > 0){sumof0Left[i][j] = 1;sumof0Up[i][j] = sumof0Up[i-1][j]+1;}else{sumof0Left[i][j] = sumof0Left[i][j-1]+1;sumof0Up[i][j] = sumof0Up[i-1][j]+1;}}}}vector<int> ans(3,-1);int edge, x, y;for(i = m-1; i >= 0; i--){for(j = n-1; j >= 0; --j){edge = min(sumof0Up[i][j], sumof0Left[i][j]);//初始边长while(edge > 0){if(ans[2] > edge)//肯定小,不必检查了break;x = i-edge+1;//上方边的xy = j-edge+1;//左侧边的yif(sumof0Up[i][y]>=edge && sumof0Left[x][j]>=edge){	//左侧边  上侧边长都大于等 edgeif(edge > ans[2]){ans[2] = edge;ans[0] = x;ans[1] = y;}else if(edge == ans[2] && x <= ans[0]){if(x < ans[0]){ans[0] = x;ans[1] = y;}else if(x == ans[0] && y < ans[1])ans[1] = y;}}edge--;//遍历所有可能}}}if(ans[0]==-1)return {};return ans;}
};

108 ms 19.2 MB

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

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

相关文章

js的oop方式和this指针问题

js的oop其实很简单&#xff0c;function本身就充当了类和构造函数的角色。然后通过传给构造函数的参数&#xff0c;完成类属性的赋值&#xff0c;从而实际化不同的对象。可是&#xff0c;js的oop也有很让人头疼的地方&#xff0c;其中之一就是this的指向。在js中&#xff0c;普…

史诗级学术骗局!一博士狂编 200 多篇论文,被揭发后畏罪自杀....

源&#xff5c;募格学术一博士狂编200多篇论文&#xff0c;被揭发后畏罪自杀&#xff0c;可他造成的撤稿影响直至今日还在继续&#xff0c;更有人称其的造假为科学史上最大的学术骗局之一。狂编200多篇论文发表&#xff0c;这个博士有点狠在著名学术打假网站 Retraction Watch …

docker安装_Docker安装

简介&#xff1a;Docker是一个供开发人员和系统管理员通过容器的方式构建、运行和共享应用程序的平台&#xff0c;通过容器的方式部署应用(打包成标准化单元&#xff0c;类似于一个集装箱)&#xff0c;具有安全、灵活、轻量、松耦合、可移植、可扩展等特点。概念&#xff1a;仓…

LeetCode 1139. 最大的以 1 为边界的正方形(DP)

1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请你找出边界全部由 1 组成的最大 正方形 子网格&#xff0c;并返回该子网格中的元素数量。如果不存在&#xff0c;则返回 0。 示例 1&#xff1a; 输入&#xff1a;grid [[1,1,1],[1,0,1],[1,1,1]] 输出&…

大幅超越DALL·E 2和Imagen,斯坦福发布RA-CM3模型,融合检索与生成

文&#xff5c;QvQ最近&#xff0c;DALL-E和CM3等模型在多模态任务尤其是图文理解上表现出色。然而&#xff0c;这些模型似乎需要将所有学到的知识存储都存储在模型参数中&#xff0c;这就不得不需要越来越大的模型和训练数据来获取更多的知识&#xff0c;俨然将bigger and bet…

什么是域名服务器(DNS)

问题&#xff1a;什么是域名服务器&#xff1f;域名服务器是什么意思&#xff1f; 域名服务器即DNS&#xff0c;全称是Domain Name Server&#xff0c;一种程序&#xff0c;它保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表&#xff0c;以解析消息的域名。…

python判断正负的函数_Python |在计算操作的函数内将负数转换为正数?

我一直在寻找将负数转换为正数&#xff0c;我发现了一些东西&#xff0c;但没有成功.. 这是一个来自在线Python页面的练习&#xff0c;我正在学习Python。 我希望你明白这一点。 这是去洛杉矶旅行&#xff0c;我用功能计算钱&#xff0c;但现在有一个问题&#xff0c;我“从洛杉…

LeetCode 1325. 删除给定值的叶子节点(递归)

1. 题目 给你一棵以 root 为根的二叉树和一个整数 target &#xff0c;请你删除所有值为 target 的 叶子节点 。 注意&#xff0c;一旦删除值为 target 的叶子节点&#xff0c;它的父节点就可能变成叶子节点&#xff1b; 如果新叶子节点的值恰好也是 target &#xff0c;那么…

[翻译] python Tutorial 之一

声明&#xff1a;本文做为IronPython-2.0 B3的Tutorial 中文译文&#xff0c;内容全部来自其英文原文&#xff0c;其中本人认为存在疑问的或翻译不当之处会用原文中的内容加以标记&#xff0c;且本文内容完全用于研 究和学习IronPython 之用&#xff0c;限于本人英文翻译功底有…

用python控制钉钉软件_Python—实现钉钉后台开发

二、实现钉钉免登流程 免登流程分四步&#xff1a;1、前端获取钉钉免登授权码code&#xff1b;2、后端获取access_token&#xff1b;3、使用授权码code和access_token换取用户userid&#xff1b;4、通过access_token和userid换取用户详情userinfo。 前端获取授权码code。// 获取…

LeetCode 1123. 最深叶节点的最近公共祖先(递归比较子树高度)

1. 题目 给你一个有根节点的二叉树&#xff0c;找到它最深的叶节点的最近公共祖先。 回想一下&#xff1a; 叶节点 是二叉树中没有子节点的节点树的根节点的 深度 为 0&#xff0c;如果某一节点的深度为 d&#xff0c;那它的子节点的深度就是 d1如果我们假定 A 是一组节点 S…

万字综述:目标检测模型YOLOv1-v7深度解析

文&#xff5c;Rocky Ding源&#xff5c;WeThinkln大家好&#xff0c;我是Rocky。近年来YOLO系列层出不穷&#xff0c;更新不断&#xff0c;已经到v7版本。Rocky认为不能简单用版本高低来评判一个系列的效果好坏&#xff0c;YOLOv1-v7不同版本各有特色&#xff0c;在不同场景&a…

python手枪_Python入门,爬虫训练——枪械查询

一、效果图&#xff1a;二、怎么做到的&#xff1f; 1&#xff0c;首先安装requests、bs4. 这两个第三方模块。 我们按住winR 在弹出来的窗口上输入cmd&#xff0c;来到命令窗口&#xff0c;输入pip install requests、pip install bs4即可&#xff0c;网速慢的可以切换至国内源…

LeetCode 865. 具有所有最深结点的最小子树(递归)

1. 题目 给定一个根为 root 的二叉树&#xff0c;每个结点的深度是它到根的最短距离。 如果一个结点在整个树的任意结点之间具有最大的深度&#xff0c;则该结点是最深的。 一个结点的子树是该结点加上它的所有后代的集合。 返回能满足“以该结点为根的子树中包含所有最深的…

为什么python是解释型面向对象的语言_python为什么是面向对象的

Python虽然是解释型语言&#xff0c;但从设计之初就已经是一门面向对象的语言&#xff0c;对于Python来说一切皆为对象。正因为如此&#xff0c;在Python中创建一个类和对象是很容易的&#xff0c;当然如果习惯面向过程或者函数的写法也是可以的&#xff0c;Python并不做硬性的…

AI写剧本炸场戏剧节!DeepMind出品,马斯克看了直夸,网友看到接口悟了

文&#xff5c;羿阁 萧箫 发自 凹非寺源&#xff5c;量子位OpenAI的ChatGPT大火后&#xff0c;DeepMind终于也坐不住了&#xff01;这次&#xff0c;他们推出一款名为“Dramatron”的新AI&#xff0c;用上它人人都可以变身编剧或作家。只需给出一句话大纲&#xff0c;Dramatron…

程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)

1. 题目 给定一个布尔表达式和一个期望的布尔结果 result&#xff0c;布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。 实现一个函数&#xff0c;算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s "1^0|0|1", r…

推荐优质的深度学习公众号

人工智能行业目前已接近饱和状态&#xff0c;如何从内卷中脱颖而出&#xff0c;除了极强的自律之外&#xff0c;系统性的学习方法也很重要。今天给大家推荐10个原创公众号&#xff0c;这些公众号定期会发些高质量原创&#xff0c;希望可以让你更高效的学习。小白学视觉哈工大博…

SQLServer安装挂起解决方法

出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。 具体步骤是&#xff1a; 1&#xff09;添加/删除程序中彻底删除sql server。 2&#xff09;将没有删除的sql server目录也删除掉。 …

程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

1. 题目 编写一个方法&#xff0c;计算从 0 到 n (含 n) 中数字 2 出现的次数。 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)提示&#xff1a; n < 10^9来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;…