题目来源:1738. 找出第 K 大的异或坐标值
/** * @param {number[][]} matrix * @param {number} k * @return {number} */ var kthLargestValue = function(matrix, k) {
}; //优化 var kthLargestValue = function(matrix, k) { let m = matrix.length; let n = matrix[0].length; let pre = new Array(m+1).fill(0).map(()=>new Array(n+1).fill(0)); let res = []; 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]; res.push(pre[i][j]); } } return res.sort((a,b)=>b-a)[k-1]; }; let matrix = [[5,2],[1,6]], k = 1; console.log(matrix, k, kthLargestValue(matrix,k)) matrix = [[5,2],[1,6]], k = 2 console.log(matrix, k, kthLargestValue(matrix,k)) matrix = [[5,2],[1,6]], k = 3 console.log(matrix, k, kthLargestValue(matrix,k)) matrix = [[5,2],[1,6]], k = 4 console.log(matrix, k, kthLargestValue(matrix,k))
思考:未优化前多做了一次遍历,没有充分利用异或的特性
提示: