lintcode-436-最大正方形
436-最大正方形
在一个二维01矩阵中找到全为1的最大正方形
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
返回 4标签
动态规划 爱彼迎 脸书
思路
使用动态规划,可以直接在 matrix 数组上修改,matrix[i][j] 表示以 i, j 为右下角的正方形的边的大小
- matrix[i][j] = 0 时,此点不能构成正方形,以 i, j 为右下角的正方形的边的大小为 0
 - matrix[i][j] = 1 时,此点可以构成正方形,以 i, j 为右下角的正方形的边的大小为 min(以 i-1, j 为右下角的正方形的边的大小,以 i, j-1 为右下角的正方形的边的大小,以 i-1, j-1 为右下角的正方形的边的大小)+1
 - 在遍历时同时保存最大边
 - 正方形大小为边的平方
 
code
class Solution {
public:
    /**
     * @param matrix: a matrix of 0 and 1
     * @return: an integer
     */
    int maxSquare(vector<vector<int> > &matrix) {
        // write your code here
        int sizeRow = matrix.size();
        if (sizeRow <= 0) {
            return 0;
        }
        int sizeCol = matrix[0].size();
        if (sizeCol <= 0) {
            return 0;
        }
        int maxCount = matrix[0][0];
        for (int i = 1; i < sizeRow; i++) {
            for (int j = 1; j < sizeCol; j++) {
                if (matrix[i][j] > 0 && matrix[i - 1][j] > 0 && matrix[i][j - 1] > 0 && matrix[i - 1][j - 1] > 0) {
                    matrix[i][j] = min(matrix[i - 1][j - 1], min(matrix[i - 1][j], matrix[i][j - 1])) + 1;
                    maxCount = max(maxCount, matrix[i][j]);
                }
            }
        }
        return maxCount * maxCount;
    }
};
												
											lintcode-436-最大正方形的更多相关文章
- 动态规划算法模板和demo
		
366. 斐波纳契数列 中文 English 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列 ...
 - lintcode:最大子正方形
		
题目: Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square contain ...
 - [LintCode] Maximal Square 最大正方形
		
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...
 - [LintCode]——目录
		
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
 - leetcode & lintcode for bug-free
		
刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...
 - leetcode & lintcode 题解
		
刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...
 - lintcode算法周竞赛
		
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 ...
 - [LeetCode] Matchsticks to Square 火柴棍组成正方形
		
Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...
 - [LeetCode] Maximal Square 最大正方形
		
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...
 - (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
		
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
 
随机推荐
- Mysql数据库报错1264
			
数据库报错 [Err] 1264 - Out of range value adjusted for column 'ID' at row 1 修改MYSQL下的my.ini, 将 sql-mode= ...
 - sourcetree的安装及使用
			
sourcetree下载地址:https://www.sourcetreeapp.com/ 点击安装包安装 此前需要跳转到bitbucket登录,我没有账号,所以我直接跳转到到https://bitb ...
 - Linux入门进阶第四天(下)——程序管理(补充内容)
			
1.PID 触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置. 同一个程序 ...
 - 20155213 实验一《Java开发环境的熟悉》实验报告
			
20155213 实验一<Java开发环境的熟悉>实验报告 一. 实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 输入cd Code进入Code文件夹里 ...
 - 20155220 吴思其 2016-2017《java程序设计》第一周总结
			
对第一章和第二章的学习 通过了前两章的学习,我了解到了java的由来以及JVM/JRE/JDK三大平台 JDK JDK 是 Java 语言的软件开发工具包. JDK是整个JAVA的核心,包括了Java ...
 - 20155307 2016-2017第三次《Java程序设计》课堂实践项目
			
码云链接 我使用电脑端登录的云班课,截图已经放上去了,却忘了点提交.
 - 《Java 程序设计》课堂实践项目-mini dc
			
<Java 程序设计>课堂实践项目-后缀表达式 课后学习总结 目录 改变 mini dc实验要求 后缀表达式介绍 课堂实践成果 课后思考 改变 修改了博客整体布局,改变了之前贴个截图粘个代 ...
 - noone is not in the sudoers file ubuntu
			
Login as root or su to get root prompt type visudo an editor will open find a line says root ALL=( ...
 - Yii2 Gridview 动态显示行或列和action列
			
我们知道Yii中的GridView组件是非常好用的. 某些情况要动态显示某列,这时候就要用到visible属性 'propString' => ['attribute' => 'prope ...
 - Android开发笔记——ListView模块、缓存及性能
			
ListView是Android开发中最常用的组件之一.本文将重点说明如何正确使用ListView,以及使用过程中可能遇到的问题. ListView开发模块 图片缓存 可能遇到的问题 一.ListVi ...