2026/4/18 1:41:49
网站建设
项目流程
网站开发过程的基本环节,就业服务网站建设方案,python 登录wordpress,精彩app应用下载给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。请你返回元素总和小于或等于阈值的正方形区域的最大边长#xff1b;如果没有这样的正方形区域#xff0c;则返回 0 。示例 1#xff1a;输入#xff1a;mat [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]…给你一个大小为m x n的矩阵mat和一个整数阈值threshold。请你返回元素总和小于或等于阈值的正方形区域的最大边长如果没有这样的正方形区域则返回0。示例 1输入mat [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]], threshold 4输出2解释总和小于或等于 4 的正方形的最大边长为 2如图所示。示例 2输入mat [[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2]], threshold 1输出0提示m mat.lengthn mat[i].length1 m, n 3000 mat[i][j] 10^40 threshold 10^5分析预处理出二维前缀和数组 pre_sum其中 pre_sum[i][j] 代表坐标 (i,j) 自身以及它下方、右方所有元素的和。之后枚举正方形边长检查是否存在元素和小于 threshold 的情况。int maxSideLength(int** mat, int matSize, int* matColSize, int threshold) { int nmatSize,mmatColSize[0]; int pre_sum[n5][m5]; for(int i0;in;i) for(int j0;jm;j) pre_sum[i][j]0; pre_sum[n-1][m-1]mat[n-1][m-1]; for(int jm-2;j0;--j) pre_sum[n-1][j]mat[n-1][j]pre_sum[n-1][j1]; for(int in-2;i0;--i) pre_sum[i][m-1]mat[i][m-1]pre_sum[i1][m-1]; for(int in-2;i0;--i) for(int jm-2;j0;--j) pre_sum[i][j]mat[i][j]pre_sum[i1][j]pre_sum[i][j1]-pre_sum[i1][j1]; int maxnnm?m:n,ans0; for(int l0;lmaxn;l) { int f0; for(int i0;in-l!f;i) { int sum0; for(int j0;jm-l!f;j) { sumpre_sum[i][j]-pre_sum[il1][j]-pre_sum[i][jl1]pre_sum[il1][jl1]; if(sumthreshold) f1; } } if(!f)break; ansl1; } return ans; }