1 题目描述
2 解题思路
设二维前缀和pre(i,j) 表示矩阵matrix 中所有满足0≤x<i 且 0≤y<j 的元素执行按位异或运算的结果
考虑pre矩阵的一个2×2 的子部分
pre(i,j) | pre(i,j) ^ matrix(i,j+1) |
pre(i,j) ^ matrix(i+1,j) | pre(i,j) ^ matrix(i,j+1) ^ matrix(i+1,j) ^ matrix(i+1,j+1) |
那么pre(i+1,j+1)=
pre(i,j) ^ matrix(i,j+1) ^ matrix(i+1,j) ^ matrix(i+1,j+1)
=pre(i,j) ^ [pre(i,j) ^ matrix(i,j+1)] ^ [pre(i,j) ^ matrix(i+1,j)] ^ matrix(i+1,j+1)
即
用一个示意图表示,即为
class Solution:
def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:
tmp=[]
ret=[]
tmp.append([matrix[0][0]])
#异或模拟的数组
ret.append(matrix[0][0])
#每个坐标异或结果的数组
for i in range(1,len(matrix)):
tmp.append([tmp[i-1][0]^matrix[i][0]])
ret.append(tmp[i-1][0]^matrix[i][0])
for i in range(1,len(matrix[0])):
tmp[0].append(tmp[0][i-1]^matrix[0][i])
ret.append(tmp[0][i-1]^matrix[0][i])
print(tmp)
for i in range(1,len(matrix)):
for j in range(1,len(matrix[0])):
tmp[i].append(tmp[i][j-1]^tmp[i-1][j]^tmp[i-1][j-1]^matrix[i][j])
ret.append(tmp[i][j-1]^tmp[i-1][j]^tmp[i-1][j-1]^matrix[i][j])
ret.sort()
return(ret[-k])