当前位置: 首页 > news >正文

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e

思路

动态规划:
先初始化第一行和第一列。然后其他单元格依赖自己的上边,左边和左上角

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 最大正方形* @param matrix char字符型二维数组* @return int整型*/public int solve (char[][] matrix) {// 动态规划://先初始化第一行和第一列。然后其他单元格依赖自己的上边,左边和左上角if (matrix == null || matrix.length == 0) return 0;int n = matrix.length;int m  =  matrix[0].length;int[][] dp = new int[n][m];int ans = 0;for (int j = 0; j < m ; j++) {if (matrix[0][j] == '1') {dp[0][j] = 1;ans = 1;}}for (int i = 0; i < n ; i++) {if (matrix[i][0] == '1') {dp[i][0] = 1;ans = 1;}}for (int i = 1; i < n ; i++) {for (int j = 1; j < m ; j++) {if (matrix[i][j] == '1') {int p1 = dp[i - 1][j - 1];int p2 = dp[i][j - 1];int p3 = dp[i - 1][j];int cur = p1;if (cur > p2) cur = p2;if (cur > p3) cur = p3;dp[i][j] = cur + 1;if (ans < dp[i][j]) {ans = dp[i][j];}}}}return ans * ans;}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 最大正方形* @param matrix char字符型二维数组* @return int整型*/
func solve(matrix [][]byte) int {// 动态规划://先初始化第一行和第一列。然后其他单元格依赖自己的上边,左边和左上角if matrix == nil || len(matrix) == 0 {return 0}n := len(matrix)m := len(matrix[0])dp := make([][]int, n)for i := 0; i < n; i++ {dp[i] = make([]int, m)}ans := 0for j := 0; j < m; j++ {if matrix[0][j] == '1' {dp[0][j] = 1ans = 1}}for i := 0; i < n; i++ {if matrix[i][0] == '1' {dp[i][0] = 1ans = 1}}for i := 1; i < n; i++ {for j := 1; j < m; j++ {if matrix[i][j] == '1' {p1 := dp[i-1][j-1]p2 := dp[i][j-1]p3 := dp[i-1][j]cur := p1if cur > p2 {cur = p2}if cur > p3 {cur = p3}dp[i][j] = cur + 1if ans < cur+1 {ans = cur + 1}}}}return ans * ans
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 最大正方形* @param matrix char字符型二维数组 * @return int整型*/
function solve( $matrix )
{// 动态规划://先初始化第一行和第一列。然后其他单元格依赖自己的上边,左边和左上角if($matrix ==null || count($matrix) ==0) return 0;$n = count($matrix);$m = count($matrix[0]);$ans = 0;$dp = array();for ($j=0;$j<$m;$j++){if($matrix[0][$j] =='1'){$dp[0][$j] =1;$ans=1;}}for($i=0;$i<$n;$i++){if($matrix[$i][0] =='1'){$dp[$i][0] =1;$ans =1;}}for($i=1;$i<$n;$i++){for($j=1;$j<$m;$j++){if($matrix[$i][$j] =='1'){$p1 = $dp[$i-1][$j-1];$p2 = $dp[$i][$j-1];$p3 = $dp[$i-1][$j];$cur =$p1;if($cur > $p2)$cur = $p2;if($cur> $p3) $cur =$p3;$dp[$i][$j] = $cur+1;if($ans < $cur+1){$ans = $cur+1;}}}}return $ans*$ans;
}
http://www.lryc.cn/news/327020.html

相关文章:

  • C#学生信息成绩管理系统
  • 精品凉拌菜系列热卤系列课程
  • Java代码基础算法练习-求一个三位数的各位数字之和-2024.03.27
  • Excel 十字交叉聚光灯查询,再也不用担心看串行与列
  • 集合和字符串的使用
  • Wagtail-基于Python Django的内容管理系统CMS实现公网访问
  • Python入门级题目及答案
  • 【C语言基础】:字符串函数(二)
  • 【Docker】Docker资源(创建容器)CPU/内存/磁盘IO/GPU限制与分配教程
  • 发展规划--IM系统
  • stm32平衡车
  • google浏览器下载文件提示无法安全地下载怎么解决?
  • Navicat 干货 | 通过检查约束确保 PostgreSQL 的数据完整性
  • FPGA时钟资源详解(2)——Clock-Capable Inputs
  • 使用JMeter的JSON提取器:通过递归下降查找,从接口响应中提取特定字段
  • Js全部循环方法解析
  • 高阶SQL语句(二)
  • Phoenix伪分布安装
  • Python算法100例-4.6 歌星大奖赛
  • 静态路由表学习实验
  • 客户端测试 可测性改进-学习记录
  • 机器学习和神经网络9
  • http模块—http请求练习
  • 视频号原视频下载使用方法?新人都在用
  • 用html画一个烟花特效
  • SQL-CRUD-1
  • linux 命令行下的计算器
  • Available platform plugins are: linuxfb, minimal, offscreen, vnc.
  • C++中string容器的修改操作
  • Elasticsearch:虚拟形象辅助和对话驱动的语音到 RAG 搜索