LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)
Posted 醉苼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)相关的知识,希望对你有一定的参考价值。
Java 原数组动态规划+优先队列
链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/solution/java-yuan-shu-zu-dong-tai-gui-hua-you-xi-ypar/
解题思路
1.含义:dp[i][j]代表(i,j)位的异或和
2.推导公式:dp[i][j] = matrix[i][j]dp[i-1][j-1]dp[i-1][j]^dp[i][j-1];
3.初始化:对所有i=0和j=0的坐标初始化
4.遍历顺序:从(1,1)顺序遍历即可
代码:
class Solution {
public int kthLargestValue(int[][] matrix, int k) {
int m = matrix.length;
int n = matrix[0].length;
PriorityQueue<Integer> pq = new PriorityQueue<Integer>((o1,o2)->(o2-o1));
pq.add(matrix[0][0]);
//初始化
for(int i = 1; i < m; i++) {
matrix[i][0] ^= matrix[i-1][0];
pq.add(matrix[i][0]);
}
for(int i = 1; i < n; i++) {
matrix[0][i] ^= matrix[0][i-1];
pq.add(matrix[0][i]);
}
//推导
for(int i = 1; i < m; i++) {
for(int j = 1; j < n; j++) {
matrix[i][j] ^= matrix[i-1][j]^matrix[i][j-1]^matrix[i-1][j-1];
pq.add(matrix[i][j]);
}
}
//取第k大的值
while(k > 1) {
pq.poll();
k--;
}
return pq.peek();
}
}
以上是关于LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)
LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)