根据上一篇文章提到的参考文档:
https://leetcode.com/discuss/109749/accepted-c-codes-with-explanation-and-references
我实现的解法,用了一个sum_max,不再另设res。
class Solution {
public:
int maxSumSubmatrix(vector<vector<int>>& matrix, int K) {
int sum_max = INT_MIN;
int rlen = matrix.size();
int clen = matrix[0].size();
for (int i=0; i<clen; i++) {
vector<int> tmp_vec(rlen, 0);
for (int j=i; j<clen; j++) {
for (int k=0; k<rlen; k++) {
tmp_vec[k] += matrix[k][j];
}
set<int> cur_max_set;
int cur_max = 0;
for (int k=0; k<rlen; k++) {
cur_max += tmp_vec[k];
if (cur_max <= K) {
sum_max = max(sum_max, cur_max);
}
set<int>::iterator iter = cur_max_set.lower_bound(cur_max - K);
if (iter != cur_max_set.end()) {
sum_max = max(sum_max, cur_max-*iter);
}
cur_max_set.insert(cur_max);
}
}
}
return sum_max;
}
};
27 / 27 test cases passed. | Status: Accepted |
Runtime: 1016 ms |