原题链接:https://leetcode-cn.com/problems/maximal-square/

动态规划:

dp[i][j]以(i,j)为右下角的正方形的边长

状态转移:

 dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;

代码:

int maximalSquare(vector<vector<char>>& matrix) {if(matrix.empty()) return 0;int m=matrix.size();int n=matrix[0].size();int S=0;vector<vector<int>> dp(m,vector(n,0));for(int i=0;i<m;i++){if(matrix[i][0]=='1') S=1;dp[i][0]=matrix[i][0]-'0';} for(int j=0;j<n;j++) {if(matrix[0][j]=='1') S=1;dp[0][j]=matrix[0][j]-'0';}for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(matrix[i-1][j-1]=='1'&&matrix[i-1][j]=='1'&&matrix[i][j-1]=='1'&&matrix[i][j]=='1'){dp[i][j]=2;} if(dp[i-1][j-1]&&dp[i-1][j]&&dp[i][j-1]&&matrix[i][j]=='1'){dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;}S=std::max(S,matrix[i][j]-'0');S=std::max(S,dp[i][j]*dp[i][j]);}}return S;
}

但是这个代码还能再优化,比如dp数组的初始化,这里可以将数组两维都分别多设置一行,这样可以省去初始化代码了。并且我之前的代码有点混乱,其实有了min这个约束,判断条件只用判断matrix[i][j]=='1'即可,并且计算dp的代码也可以简化。

int maximalSquare(vector<vector<char>>& matrix) {if(matrix.empty()) return 0;int m=matrix.size();int n=matrix[0].size();int S=0;vector<vector<int>> dp(m+1,vector(n+1,0));for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(matrix[i-1][j-1]=='1'){dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;}S=max(S,dp[i][j]*dp[i][j]);}}return S;
}

leetcode算法题--最大正方形相关推荐

  1. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  2. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  3. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  4. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  5. leetcode算法题--零钱兑换

    原题链接:https://leetcode-cn.com/problems/coin-change/ 相关题目:leetcode算法题–完全平方数★ 动态规划 dp[i] i从0到amount,dp[ ...

  6. leetcode算法题-- 买卖股票的最佳时机

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 这类股票题目请见leetcode算法题–最佳买卖股票时机含 ...

  7. leetcode算法题--买卖股票的最佳时机 II

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 这类股票题目请见leetcode算法题–最佳买卖股票 ...

  8. leetcode算法题--买卖股票的最佳时机含手续费

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 这类股票题目请见 ...

  9. leetcode算法题--完全平方数★

    原题链接:https://leetcode-cn.com/problems/perfect-squares/ 相关题目:leetcode算法题–零钱兑换 1.回溯法 就是暴力法,套路就是递归,但是有很 ...

最新文章

  1. 皮一皮:来看看你是哪一档...
  2. java web shiro_javase和javaweb环境下shiro的搭建
  3. 打包android阴影不见,Android无pading超简单超实用阴影解决方案
  4. 月结 sap_乡村基SAP:领跑中式快餐数字化转型
  5. python 遍历目录或文件
  6. 学习Raft算法的笔记
  7. Python Configparser模块读取、写入配置文件
  8. MYSQL禁用与启用事件
  9. VSCode LaTex 安装
  10. c# 设为首页和加入收藏代码
  11. sql基础语句(联表查询)
  12. 常用的免费CMS建站系统推荐
  13. AWS实战:AWS Kinesis Data Firehose
  14. Teams Bot App 代码解析
  15. JavaScript打造很酷的图片放大效果实例代码
  16. 魅族16无信号服务器,魅族16信号差的解决办法
  17. 如何将ida中的悬浮窗口恢复原位
  18. 计算机的应用给我们带来了,电脑能给我们的生活带来哪些便利
  19. Vuepress多语言支持
  20. 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码

热门文章

  1. python怎么识别拼音-Python 获取中文字拼音首个字母的方法
  2. python在读写文件之前需要创建文件对象-python读取或写入文件
  3. python的运行窗口-在 Python 窗口中执行工具
  4. python学起来难不难-新手学python数据分析难不难?
  5. python订单详细教程-Python抓取订单页面
  6. 济南python工资一般多少钱-济南Python+人工智能
  7. python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3
  8. python编程从入门到实践课后题答案-python编程:从入门到实践习题5-8~5-11
  9. spring中的bean属性相关访问、编辑、转换
  10. LeetCode Integer Replacement