363. Max Sum of Rectangle No Larger Than K
Given a non-empty 2D matrix matrix and an integer k , find the max sum of a rectangle in the matrix such that its sum is no larger than k.
Example:
Input: matrix = [[1,0,1],[0,-2,3]], k = 2
Output: 2
Explanation: Because the sum of rectangle [[0, 1], [-2, 3]] is 2,
and 2 is the max number no larger than k (k = 2).
Note:
- The rectangle inside the matrix must have an area > 0.
- What if the number of rows is much larger than the number of columns?
# @lc code=start
using LeetCode
function max_sum_submatrix(matrix::AbstractMatrix{Int}, k::Int)
m, n = size(matrix)
m > n && return max_sum_submatrix(matrix', k)
pref_sum = OffsetArray(fill(0, m + 1, n + 1), -1, -1)
for i in 1:m, j in 1:n
pref_sum[i, j] = pref_sum[i - 1, j] + pref_sum[i, j - 1] + matrix[i, j] -
pref_sum[i - 1, j - 1]
end
res = typemin(Int)
for tp in 1:m, bot in tp:m
ss = SortedSet{Int}()
push!(ss, 0)
for r in 1:n
rows_sum = pref_sum[bot, r] - pref_sum[tp - 1, r]
tk = searchsortedfirst(ss, rows_sum - k)
tk != pastendsemitoken(ss) && (res = max(res, rows_sum - deref((ss, tk))))
push!(ss, rows_sum)
end
end
return res
end
# @lc code=end
max_sum_submatrix (generic function with 1 method)
This page was generated using DemoCards.jl and Literate.jl.