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

奶牛的活动面积

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param land char字符型二维数组
     * @return int整型
     */
    public int maximalSquare (char[][] land) {
        // write code here
        int maxSide = 0;
        if (land.length == 0 || land[0].length == 0) {
            return maxSide;
        }
        int rows = land.length, cols = land[0].length;
        int[][] dp = new int[rows][cols];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (land[i][j] == 'C') {
                    if (i == 0 || j == 0) {
                        dp[i][j] = 1;
                    } else {
                        dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                    }
                    maxSide = Math.max(maxSide, dp[i][j]);
                }
            }
        }
        return maxSide * maxSide;
    }
}

代码使用的编程语言是Java。

该题考察的知识点是动态规划。给定一个由字符 'C' 和 'O' 组成的二维字符数组 land,要求找出其中由字符 'C' 组成的最大正方形的边长。

代码解释如下:

  1. 定义一个名为 Solution 的类,并声明了一个名为 maximalSquare 的方法,该方法接受一个 vector<vector<char>> 类型的参数 land,返回一个 int 类型的结果。
  2. 首先初始化一个变量 maxSide 为0,用于记录最大正方形的边长。
  3. 如果 land 的行数或列数为0,则直接返回 maxSide
  4. 获取 land 的行数和列数,并分别保存在变量 rows 和 cols 中。
  5. 创建一个二维向量 dp,大小为 rows 行 cols 列,用于记录以当前位置为右下角的最大正方形的边长。
  6. 使用嵌套循环遍历每个位置 (i, j):如果 land[i][j] 的值为 'C',表示当前位置可以构成正方形的一部分如果 i 或 j 等于0,表示当前位置在第一行或第一列,无法与其左上、上方或左侧的正方形相连,则将 dp[i][j] 更新为1否则,根据动态规划的思想,dp[i][j] 的值应该是 dp[i-1][j]、dp[i][j-1] 和 dp[i-1][j-1] 三个值中的最小值加1,因为它们可以组成更大的正方形更新 maxSide 为较大的值,即 max(maxSide, dp[i][j])
  7. 循环结束后,返回 maxSide 的平方作为结果。

全部评论

相关推荐

07-23 15:05
门头沟学院 Java
熊大不大:不好意思KPI数据刚刚刷新,刚刚达标
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务