-
发表于 2024.05.26
-
前缀和思路的二维+异或版本,可以就地使用原数组维护前缀和,即
matrix[i][j]
为矩阵matrix
中(0, 0)
到(i, j)
的异或和,且matrix[i][j] = matrix[i-1][j] ^ matrix[i][j-1] ^ matrix[i-1][j-1] ^ matrix[i][j]
(因为matrix[i - 1][j - 1]
实际上都包含在matrix[i-1][j]
和matrix[i][j-1]
中,两者异或后相互抵消了,需要再异或一次)。然后使用排序或者堆来维护前k
大的值即可。import heapq class Solution: def kthLargestValue(self, matrix: List[List[int]], k: int) -> int: pq = [] for i in range(len(matrix)): for j in range(len(matrix[i])): matrix[i][j] = ( (matrix[i - 1][j] if i > 0 else 0) ^ (matrix[i][j - 1] if j > 0 else 0) ^ (matrix[i - 1][j - 1] if i > 0 and j > 0 else 0) ^ matrix[i][j] ) heapq.heappush(pq, matrix[i][j]) if len(pq) > k: heapq.heappop(pq) return pq[0]
- LC 题目链接
-