Submatrix Sum
Given an integer matrix, find a submatrix where the sum of numbers is zero. Your code should return the coordinate of the left-up and right-down number.
Example
Given matrix
[
[1 ,5 ,7],
[3 ,7 ,-8],
[4 ,-8 ,9],
]return[(1,1), (2,2)]
分析
subarray sum的matrix变种
presum的计算法:此处是每一列的sum
sumY[i][j] = i-1 < 0 ? 0 : sumY[i-1][j] + matrix[i][j];矩阵和的计算法:以x,y为终点的方块面积,计算时候外面左边和上面包一层0。
先求每一列的和,然后在此基础上求每一行的和,就是以xy结尾的矩阵和。
sumY[i][j] = i-1 < 0 ? 0 : sumY[i-1][j] + matrix[i][j];
sum[i][j] = sum[i][j-1] + sumY[i-1][j-1];2.左边+上面-重合部分+当前点matrix[i][j]
sum[i+1][j+1] = matrix[i][j] + sum[i+1][j] + sum[i][j+1] - sum[i][j];代码说明:预处理得到以0,0为起点,x,y为终点的矩阵和,x轴上设置low,high,然后遍历y轴j,得到以0为起点,j轴为终点的矩形面积。
用Hashmap存储以0轴为起点,y轴为终点,low和high内切的矩形面积。如果下一次再遇到这个面积,说明中间有一段包含的面积是0。
tricky点:结果里起点左边直接用,终点坐标都要-1
答案
注释的部分是另一种矩阵和的做法。
Last updated
Was this helpful?