题目:
给你一个二维矩阵 matrix
和一个整数 k
,矩阵大小为 m x n
由非负整数组成。
矩阵中坐标 (a, b)
的 值 可由对所有满足 0 <= i <= a < m
且 0 <= j <= b < n
的元素 matrix[i][j]
(下标从 0 开始计数)执行异或运算得到。
请你找出 matrix
的所有坐标中第 k
大的值(k
的值从 1 开始计数)。
思路:
用一个二维列表s记录所有“矩阵中坐标 (a, b)
的 值”,设s[i+1][j+1]表示左上角矩阵(0,0)至(i,j)的异或和,那么如下图所示为例:
可得公式:
代码如下:
class Solution:
def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:
m = len(matrix)
n = len(matrix[0])
s = [[0] * (n+1) for _ in range(m+1)]
for i in range(0, m):
for j in range(0, n):
s[i+1][j+1] = s[i][j+1] ^ s[i+1][j] ^ s[i][j] ^ matrix[i][j]
s_ = [item for row in s for item in row] # 展成一维列表
s_.sort() # 排序
return s_[-k] # 返回第k大的值
提交通过: