这个问题其实就是在求一个靠近 2sum 的最近的数,不过这个数是由正方形中的数的和组成的。
那么可以考虑枚举正方形的左上角端点,然后二分正方形的边长,找到一个正方形数之和大于等于 2sum 的最小边长。
而这里判断时需要快速求出一个正方形内数的和,可以通过预处理二维前缀和,然后查询可以O(1)计算出。
时间复杂度:O(nmlogn)
在一个 n×m 的整数矩阵中,你需要挑选一个行数和列数相等的子矩阵(即正方形子矩阵)。记该子矩阵内所有元素之和为 Sin,矩阵其余部分所有元素之和为 Sout。你的目标是让 ∣Sin−Sout∣ 尽可能小。请你计算这个最小可能值。
数据范围:矩阵的行数和列数均不超过 1000,矩阵中的每个数值均为不超过 10000 的正整数。
第一行包含两个正整数 n 和 m(1≤n,m≤1000),分别表示矩阵的行数和列数。 接下来 n 行,每行包含 m 个整数(数值范围 1 到 10000),表示矩阵对应位置的元素。
In following contests:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册