import heapq
class Solution:
def kthLargestValue(self, matrix, k):
m, n = len(matrix), len(matrix[0])
# Build prefix XOR matrix
pre = [[0] * (n + 1) for _ in range(m + 1)]
vals = []
for i in range(1, m + 1):
for j in range(1, n + 1):
pre[i][j] = (pre[i-1][j] ^
pre[i][j-1] ^
pre[i-1][j-1] ^
matrix[i-1][j-1])
vals.append(pre[i][j])
# Find kth largest
return heapq.nlargest(k, vals)[-1]
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
class Solution {
public:
int kthLargestValue(vector<vector<int>>& matrix, int k) {
int m = matrix.size(), n = matrix[0].size();
vector<vector<int>> pre(m + 1, vector<int>(n + 1, 0));
vector<int> vals;
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];
vals.push_back(pre[i][j]);
}
}
nth_element(vals.begin(), vals.begin() + k - 1, vals.end(), greater<int>());
return vals[k-1];
}
};
import java.util.*;
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> vals = new ArrayList<>();
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];
vals.add(pre[i][j]);
}
}
Collections.sort(vals, Collections.reverseOrder());
return vals.get(k-1);
}
}
var kthLargestValue = function(matrix, k) {
const m = matrix.length, n = matrix[0].length;
const pre = Array.from({length: m+1}, () => Array(n+1).fill(0));
const vals = [];
for (let i = 1; i <= m; ++i) {
for (let 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];
vals.push(pre[i][j]);
}
}
vals.sort((a, b) => b - a);
return vals[k-1];
};
matrix
with dimensions m x n
, define the XOR coordinate value at position (a, b)
as the cumulative XOR of all elements from the top-left corner (0, 0)
to (a, b)
. Specifically, for each cell (a, b)
, the value is:
matrix[0][0] ^ ... ^ matrix[0][b] ^ ... ^ matrix[a][0] ^ ... ^ matrix[a][b]
k
th largest value among them.
(0,0)
to (a,b)
.pre
with dimensions (m+1) x (n+1)
initialized to zero.(i, j)
in the original matrix, compute:
pre[i][j] = pre[i-1][j] ^ pre[i][j-1] ^ pre[i-1][j-1] ^ matrix[i-1][j-1]
pre[i][j]
contains the XOR of all elements from (0,0) to (i-1,j-1).pre[i][j]
, add it to a list or array.k-1
(since indices are zero-based).matrix = [[5, 2], [1, 6]], k = 2
[5, 7, 4, 0]
[7, 5, 4, 0]