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 大的异或坐标值

leetcode1738. 找出第 K 大的异或坐标值

LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)

LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)

LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)

LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)