Question 3
直接用prefixSum一边计算,一边更新
class Solution {
public int maxSideLength(int[][] mat, int threshold) {
int[][] prefixSum = new int[mat.length + 1][mat[0].length + 1];
int result = 0;
int sideLength = 1;
for (int i = 1; i <= mat.length; i++) {
for (int j = 1; j <= mat[0].length; j++) {
prefixSum[i][j] = prefixSum[i-1][j] - prefixSum[i][j - 1] - prefixSum[i-1][j] + mat[i -1][j - 1];
int curr = prefixSum[i][j] - prefixSum[i - sideLength][j] - prefixSum[i][j - sideLength] + prefixSum[i - sideLength][j - sideLength];
if (i >= sideLength && j >= sideLength && curr <= threshold) {
result = sideLength;
sideLength++;
}
}
}
return result;
}
}
Last updated