题目描述:

解:
还是异或,还是前缀异或,和昨天的区别是这次是一个二维数组,所以相应的,我们需要用二维前缀异或处理数组: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);}}
