LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法
题目地址: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解法相关推荐
- LeetCode 93. Restore IP Addresses--面试算法题--Python解法
题目地址:Restore IP Addresses - LeetCode Given a string containing only digits, restore it by returning ...
- leetcode 221. Maximal Square | 221. 最大正方形(优化的暴力解法+动态规划解法)
题目 https://leetcode.com/problems/maximal-square/ 题解 方法1:最暴力解 O((m*n)^2) public class Solution {publi ...
- 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 ...
- [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 ...
- 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 ...
- 力扣高频算法php_互联网公司最常见的面试算法题有哪些?
很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...
- 互联网公司最常见的面试算法题大集合!
转载于 新智元 来源:Github 编辑:元子 [导读]LeetCode是一个美国的在线编程网站,收集了各个大厂的笔试面试题,对找工作的毕业生和开发者来说,非常有价值.很多求职者都会在Leet ...
- 常考面试算法题类型总结(来自知乎)
作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
最新文章
- 算法----两数之和
- Javascript 限制文本字节数
- ubuntu apache 完全删除
- 因为征信原因,买房的2万定金没了
- codeforces #236 div2 简洁题解
- python问题解决方案_Python安装、遇到的问题及解决方案,python,和,方法
- 在CentOS5.4上安装Git
- 插值法补齐缺失数据_数据处理——缺失值处理
- mie散射理论方程_Mie氏散射理论的实验研究
- mysql ddl 失败_PHP加载mysql DDL会失败
- 在自定义HttpHandler 中使用Session
- Ruby编程语言面试题库和答案(语法、代码)
- 2021年海河英才计划天津落户天津最详细过程
- home目录权限linux,linux 文件/文件夹权限
- win10资源管理器——删除左侧图标(自用)
- nyoj-506-洗澡
- VS2019显示错误未定义标识符delay
- 对比这10个注意事项,你的网页文字排版达标了么?
- mc服务端 linux,在Debian Linux上开启MineCraft(MC)服务器的一点经验
- 团队第二次作业——需求分析
热门文章
- News | Atomwise获投1.23亿美元推进AI药物研发
- 第二十五课.元学习MetaLearning
- 其他算法-两大随机采样方法简介
- 计算机二级word保存要不要加.docx,计算机二级word实操题.docx
- clickhouse批量写入_交互式分析领域,为何 ClickHouse 能够杀出重围?
- 植保口的面上项目共153项,系统总结
- R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
- python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)
- R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)
- pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)