题目描述:
解:
还是异或,还是前缀异或,和昨天的区别是这次是一个二维数组,所以相应的,我们需要用二维前缀异或处理数组:pre(i,j) = pre(i-1,j) xor pre(i,j-1) xor pre(i-1,j-1) xor matrix(i,j)
而后只需要对所有值排序找出要找的第k大即可
class Solution {
public int kthLargestValue(int[][] matrix, int k) {
int m = matrix.length, n = matrix[0].length;
int[][] pre = new int[m + 1][n + 1];
List<Integer> xor = new ArrayList<Integer>();
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
pre[i][j] = pre[i - 1][j] ^ pre[i][j - 1] ^ pre[i - 1][j - 1] ^ matrix[i - 1][j - 1];
xor.add(pre[i][j]);
}
}
Collections.sort(xor, (num1,num2) -> {
return num2 - num1;
});
return xor.get(k - 1);
}
}