题目地址:Maximal Square - LeetCode


Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area.

Example:

Input: 1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0Output: 4

这道题目意思很容易懂,就是找出最大的正方形。

这道题目是我面XX时遇到的算法题。
根据Google | L3 | Seattle | Sep 2019 [No Offer] - LeetCode Discuss这篇文章,他在面谷歌时遇到了这道算法题。

最容易想到的就是暴力的方法,当然时间复杂度太高,肯定不被接受。

然后面试官提示我用动态规划,我就描述了一下我的算法。因为时间不够,面试官要吃饭去了,就没让我仔细解释。

Python解法如下:

class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:result = 0if matrix == []:return resultheight, width = len(matrix), len(matrix[0])dp = []for i in range(0, height + 1):dp.append([0] * (width + 1))for i in range(1, height + 1):for j in range(1, width + 1):if matrix[i-1][j-1]=='1':dp[i][j] = min(dp[i][j - 1], dp[i - 1][j - 1], dp[i - 1][j]) + 1result = max(dp[i][j], result)return result ** 2

时间复杂度为O(nm),空间复杂度为O(mn)。

一般来说上面这个解法就可以了,但有空间复杂度为O(m)的更巧妙的解法。

Python解法如下:

class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:result = 0if matrix == []:return resultheight, width = len(matrix), len(matrix[0])dp = [0] * (width + 1)prev = 0for i in range(1, height + 1):for j in range(1, width + 1):temp = dp[j]if matrix[i - 1][j - 1] == '1':dp[j] = min(dp[j - 1], prev, dp[j])+1result = max(result, dp[j])else:dp[j] = 0prev = tempreturn result ** 2

LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法相关推荐

  1. LeetCode 93. Restore IP Addresses--面试算法题--Python解法

    题目地址:Restore IP Addresses - LeetCode Given a string containing only digits, restore it by returning ...

  2. leetcode 221. Maximal Square | 221. 最大正方形(优化的暴力解法+动态规划解法)

    题目 https://leetcode.com/problems/maximal-square/ 题解 方法1:最暴力解 O((m*n)^2) public class Solution {publi ...

  3. LeetCode 221. Maximal Square (最大正方形)

    原题 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and ...

  4. [leetcode ]221. Maximal Square c语言

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ...

  5. LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)

    welcome to my blog LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium) 题目描述 Given a ...

  6. 力扣高频算法php_互联网公司最常见的面试算法题有哪些?

    很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...

  7. 互联网公司最常见的面试算法题大集合!

      转载于 新智元   来源:Github 编辑:元子 [导读]LeetCode是一个美国的在线编程网站,收集了各个大厂的笔试面试题,对找工作的毕业生和开发者来说,非常有价值.很多求职者都会在Leet ...

  8. 常考面试算法题类型总结(来自知乎)

    作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  9. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

最新文章

  1. 算法----两数之和
  2. Javascript 限制文本字节数
  3. ubuntu apache 完全删除
  4. 因为征信原因,买房的2万定金没了
  5. codeforces #236 div2 简洁题解
  6. python问题解决方案_Python安装、遇到的问题及解决方案,python,和,方法
  7. 在CentOS5.4上安装Git
  8. 插值法补齐缺失数据_数据处理——缺失值处理
  9. mie散射理论方程_Mie氏散射理论的实验研究
  10. mysql ddl 失败_PHP加载mysql DDL会失败
  11. 在自定义HttpHandler 中使用Session
  12. Ruby编程语言面试题库和答案(语法、代码)
  13. 2021年海河英才计划天津落户天津最详细过程
  14. home目录权限linux,linux 文件/文件夹权限
  15. win10资源管理器——删除左侧图标(自用)
  16. nyoj-506-洗澡
  17. VS2019显示错误未定义标识符delay
  18. 对比这10个注意事项,你的网页文字排版达标了么?
  19. mc服务端 linux,在Debian Linux上开启MineCraft(MC)服务器的一点经验
  20. 团队第二次作业——需求分析

热门文章

  1. News | Atomwise获投1.23亿美元推进AI药物研发
  2. 第二十五课.元学习MetaLearning
  3. 其他算法-两大随机采样方法简介
  4. 计算机二级word保存要不要加.docx,计算机二级word实操题.docx
  5. clickhouse批量写入_交互式分析领域,为何 ClickHouse 能够杀出重围?
  6. 植保口的面上项目共153项,系统总结
  7. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
  8. python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)
  9. R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)
  10. pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)