题解 | #奶牛的活动面积#
奶牛的活动面积
https://www.nowcoder.com/practice/666cb0dd46a2439fb7c44d24a9918bf7?tpId=354&tqId=10595794&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param land char字符型二维数组
* @return int整型
*/
public int maximalSquare (char[][] land) {
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;
}
}
本题知识点分析:
1.动态规划
2.数组遍历
3.API函数
本题解题思路分析:
1.dp数组用于存储最大正方形的边长
2.dp数组初始化 if (i == 0 || j == 0) dp[i][j] = 1;
3.dp公式推导 dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1; 左上,上,左,三种的最小值+1,就是右下
4.每次更新dp值后,将当前dp[i][j]的值与maxSide进行比较,取较大值作为新的maxSide,边长


字节跳动公司福利 1366人发布