日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常考数据结构与算法:最大正方形

發布時間:2025/6/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常考数据结构与算法:最大正方形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

給定一個由0和1組成的2維矩陣,返回該矩陣中最大的由1組成的正方形的面積

?

示例1

輸入

[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]]

返回值

4

?

import java.util.HashMap;public class SquareMe {public static void main(String[] args) {char [] [] matrix = {{'1','0','1','0','0'},{'0','0','1','1','1'},{'1','0','1','1','1'},{'0','0','0','0','0'},{'1','0','0','1','0'}};SquareMe squareMe = new SquareMe();System.out.println(squareMe.solve(matrix));}//在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,并返回其面積。//暴力求解public int find_maximalSquare(char[][]matrix){int maxSide = 0;if (matrix==null || matrix.length==0|| matrix[0].length==0){return maxSide;}int rows = matrix.length;int cols = matrix[0].length;for (int i = 0; i <rows ; i++) {for (int j = 0; j <cols ; j++) {if (matrix[i][j]=='1'){maxSide = Math.max(maxSide,1);//計算可能的最大正方形邊長int currentMaxSide = Math.min(rows-i,cols-j);for (int k = 1; k <currentMaxSide ; k++) {//判斷新增一行一列是否均為1boolean flag = true;// 如果對角的點不是1,那就形成不了一個正方形if (matrix[i+k][j+k] == '0'){break;}// 如果對角的點是1, 那么再判斷邊上的點是不是1,如果是1,那么就能組成一個正方形for (int m = 0; m <k ; m++) {if (matrix[i+k][j+m]=='0' || matrix[i+m][j+k]=='0'){flag = false;break;}}if (flag){maxSide = Math.max(maxSide,k+1);}else {break;}}}}}return maxSide* maxSide;}/**** [1,0,1,0,0]* [1,0,1,1,1]* [1,1,1,1,1]* [1,0,0,1,0]** 動態規劃** 最大正方形* @param matrix char字符型二維數組* @return int整型*/public int solve (char[][] matrix) {int maxSide=0;if (matrix==null || matrix.length==0||matrix[0].length==0){return maxSide;}int rows = matrix.length,cols=matrix[0].length;int [][]dp=new int[rows][cols];for (int i = 0; i <rows ; i++) {for (int j = 0; j <cols ; j++) {if (matrix[i][j] =='1'){// 動態規劃 每次是1,就記錄下此時的狀態,以便下次使用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;} }

?

總結

以上是生活随笔為你收集整理的常考数据结构与算法:最大正方形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。