class Solution {
public:
int maxSideLength(vector<vector<int>>& mat, int threshold) {
int N = mat.size();
int M = mat[0].size();
vector<vector<int>> dp(N+1,vector<int>(M,0));
for(int i=1;i<=N;i++){
for(int j=0;j<M;j++){
dp[i][j] = dp[i-1][j] + mat[i-1][j];
}
}
int ans = 0;
// 枚举边长
for(int k=1;k<=min(M,N);k++){
// 枚举x
bool flag = true;
for(int i=k;i<=N && flag;i++){
long long sum = 0;
// 枚举y
for(int j=0;j<k;j++) sum += dp[i][j] - dp[i-k][j];
if(sum <= threshold) flag = false;
for(int j=k;j<M && flag;j++){
sum += dp[i][j] - dp[i-k][j] - (dp[i][j-k] - dp[i-k][j-k]);
if(sum <= threshold) flag = false;
}
}
if(!flag) ans = max(ans,k);
}
return ans;
}
};
No.161 - leetCode1292
最新推荐文章于 2025-12-03 00:12:16 发布
881

被折叠的 条评论
为什么被折叠?



