您的位置:首页 > 其它

[LeetCode]Max Sum of Rectangle No Larger Than K

2016-11-15 08:45 330 查看
public class Solution {
public int maxSumSubmatrix(int[][] matrix, int k) {
if (matrix == null || matrix[0].length == 0) return 0;
int res = Integer.MIN_VALUE;
for (int left = 0; left < matrix.length; left++) {
int[] sums = new int[matrix[0].length];
for (int right = left; right < matrix.length; right++) {
for (int i = 0; i < matrix[0].length; i++) sums[i] += matrix[right][i];
TreeSet<Integer> set = new TreeSet<>();
set.add(0);
int curSum = 0;
for (int sum : sums) {
curSum += sum;
// num是sums从0到某位置的和,那么curSum - num就是sums的0到i之中最符合要求的子序列
Integer num = set.ceiling(curSum - k);
if (num != null) res = Math.max(res, curSum - num);
set.add(curSum);
}
}
}
return res;
}
}


本题的关键是理解注释所在的循环, Kadane's algorithm和https://discuss.leetcode.com/topic/48875/accepted-c-codes-with-explanation-and-references都对于解本题有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: