363. Max Sum of Rectangle No Larger Than K

https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/

二维矩阵中最大和不超过K的长方形,它的和是多少。这道题如果把不超过K的限制去了,本身也是个hard题,在此基础上要求找和不大于K的最大和,难上加难。先不看K的限制,一维最大子数组用常见subarray DP套路,即分别看以i结尾子数组最大和会是多少。二维矩阵以列为基准,固定l,r不断++,维持一个长度为N的数组sum,sum_i表示第i行从l累加到r是多少, 再对sum数组求最大子数组。此时得到就是以l和r为两边,最大子长方形是多少,如图所示:

然后我们遍历所有可能的l和r得出global最优。对于这道题还要把对sum求max sum subarray替换成求对sum找不大于K的最大子数组和: 把presum思想中用于找sum中有没有何为K的子数组的hash set替换成tree set使得所有sum元素有序,也就能找最接近K的子数组了。

解法参考自

Last updated

Was this helpful?