题解 | #奶牛的活动面积#

奶牛的活动面积

https://www.nowcoder.com/practice/666cb0dd46a2439fb7c44d24a9918bf7

  • 题目考察的知识点 : 动态规划
  • 题目解答方法的文字分析:
  1. 定义一个二维整数数组 dp,其中 dp[i][j] 表示以第 i 行、第 j 列为右下角的最大正方形的边长。
  2. 对于每个位置 (i, j),如果 matrix[i][j] 为 'C',那么它可能成为某个正方形的右下角,此时我们需要找到它上面、左边和左上角三个位置的最小值,并加上 1,作为以这个位置为右下角的最大正方形的边长。具体而言,我们有如下动态规划转移方程:dp[i][j]=min{dp[i−1][j],dp[i][j−1],dp[i−1][j−1]}+1, if matrix[i][j]=′C′
  3. 每个正方形都必须是连续的一片区域,因此除了第一行和第一列以外的位置,如果 matrix[i][j] 为 'E',则 dp[i][j] 必须设为 0。
  4. 最终答案即为 dp 中所有元素的最大值的平方,因为正方形的面积等于边长的平方。
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param land char字符型二维数组 
# @return int整型
#
class Solution:
    def maximalSquare(self , land: List[List[str]]) -> int:
        m, n = len(land), len(land[0])
        dp = [[0] * n for _ in range(m)]
        ans = 0
        for i in range(m):
            for j in range(n):
                if land[i][j] == 'C':
                    if i == 0 or j == 0:
                        dp[i][j] = 1
                    else:
                        dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
                    ans = max(ans, dp[i][j])
                else:
                    dp[i][j] = 0
        return ans * ans
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

03-05 15:13
运营
点赞 评论 收藏
分享
02-23 12:32
已编辑
门头沟学院 嵌入式工程师
King987:学历没有问题,然后既然有实习经历的话,把这个放在上面多写一点,哪怕你自己包装一下,只要能圆回来就行,既然有实习经历的话,肯定主要看实习经历之类的。然后也会主要问这里多准备准备
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务