题4:边长为1的最大子方阵优化 预处理 对每个位置上为1的元素找右边下边有多少个1 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 3,3 2,4 1,0 0,0 2,2 1,3 0,0 1,3 2,1 1,2 0,0 1,2 0,0 3,1 2,1 1,1 (右,下)//算上自身 [3],[3] 2,[4] [2], 2 1, 3 只需要看这四个数就可以确定一个正方形 //输出右下1个数的矩阵 private static void print(int[][][] rec,int N){ for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ System.out.print(rec[i][j][0]+","+rec[i][j][1]+"\t"); } System.out.println(); } } //全局变量 int[][][]res;//保存1右下个数的数组 //生成右边和下边的1的数量的数组 private static void generateHelpRec(int[][] A){ int N=A.length; res=new int[N][N][2]; //最后一行 int row=N-1; //初始化最下面一层 for(int j=N-1;j>=0;j--){ int value=A[row][j]; if(value==1){ if(j==N-1) {rec[row][j][0]=1;}//右侧连接1的个数,最底层 else {rec[row][j][0]=rec[row][j+1][0]+1;} res[row][j][1]=1; } } row--; for(int i=row;i>=0;i--){ for(int j=N-1;j>=0;j--){ int value=A[i][j]; if(value==1){ if(j==N-1) rec[i][j][0]=-1; else rec[i][j][0]=1=rec[i][j+1][0]+1; res[i][j][1]=res[i][j][1]+1;//向下连接的个数 } } } return } //检查四条边是否正确 private static boolean check(int i,int j,int n){ //左上角那个点往右数的1的数目要≥n //左上角那个点往下数的1的数目要≥n //右上角那个点往下数的1的数目要≥n //左下角那个点往右数的1的数目要≥n if(rec[i][j][0]>=n&&rec[i][j][1]>=n&&rec[i][j+n-1][1]>=n&&rec[i+n-1][j][0]>=n) return true; return false; } private static int solve(int[][] A){ int N=A.length; int n=N; while(n>0){ for(int i=0;i<N;i++){ l3; if(i+n>N)break;//越界 for(int j=0;j<N;j++){ if(j+n>N)break;//越界 //检查四个边 if(check(i,j,n)) return n; } } } } //这种从底层往上求的方式类似于动态规划里的打表法
蓝桥杯算法基础(25)边长为1的最大子方阵优化
湖前一人对影成双2024-03-19 17:18
相关推荐
JieE2125 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题JieE2126 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解vivo互联网技术10 小时前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像Darling噜啦啦11 小时前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点用户4978630507314 小时前
(一)小红的数组操作怕浪猫17 小时前
Electron 系列文章封面图徐小夕19 小时前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器通信小呆呆1 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?