根据上一篇文章提到的参考文档:
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
|