363:矩形区域不超过 K 的最大数值和
This commit is contained in:
parent
8d6a0d6bfb
commit
2f413f074a
@ -41,6 +41,7 @@ package leetcode.editor.cn;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
//363:矩形区域不超过 K 的最大数值和
|
//363:矩形区域不超过 K 的最大数值和
|
||||||
public class MaxSumOfRectangleNoLargerThanK {
|
public class MaxSumOfRectangleNoLargerThanK {
|
||||||
@ -61,29 +62,28 @@ public class MaxSumOfRectangleNoLargerThanK {
|
|||||||
//leetcode submit region begin(Prohibit modification and deletion)
|
//leetcode submit region begin(Prohibit modification and deletion)
|
||||||
class Solution {
|
class Solution {
|
||||||
public int maxSumSubmatrix(int[][] matrix, int k) {
|
public int maxSumSubmatrix(int[][] matrix, int k) {
|
||||||
int xLength = matrix.length;
|
int ans = Integer.MIN_VALUE;
|
||||||
int yLength = matrix[0].length;
|
int m = matrix.length, n = matrix[0].length;
|
||||||
int[][] sums = new int[xLength][yLength];
|
for (int i = 0; i < m; ++i) { // 枚举上边界
|
||||||
for (int i = 0; i < xLength; i++) {
|
int[] sum = new int[n];
|
||||||
int sum = 0;
|
for (int j = i; j < m; ++j) { // 枚举下边界
|
||||||
for (int j = 0; j < yLength; j++) {
|
for (int c = 0; c < n; ++c) {
|
||||||
sum += matrix[i][j];
|
sum[c] += matrix[j][c]; // 更新每列的元素和
|
||||||
sums[i][j] = sum;
|
}
|
||||||
}
|
TreeSet<Integer> sumSet = new TreeSet<Integer>();
|
||||||
}
|
sumSet.add(0);
|
||||||
int max = Integer.MIN_VALUE;
|
int s = 0;
|
||||||
for (int i = yLength - 1; i >= 0; i--) {
|
for (int v : sum) {
|
||||||
for (int l = 0; l <= i; l++) {
|
s += v;
|
||||||
int sum = 0;
|
Integer ceil = sumSet.ceiling(s - k);
|
||||||
for (int j = 0; j < xLength; j++) {
|
if (ceil != null) {
|
||||||
sum += l == 0 ? sums[j][i] : sums[j][i] - sums[j][i-l];
|
ans = Math.max(ans, s - ceil);
|
||||||
if (sum <= k) {
|
|
||||||
max = Math.max(max, sum);
|
|
||||||
}
|
}
|
||||||
|
sumSet.add(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return max;
|
return ans;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//leetcode submit region end(Prohibit modification and deletion)
|
//leetcode submit region end(Prohibit modification and deletion)
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user