1. 程式人生 > 其它 >【java】1738. 找出第 K 大的異或座標值---計算每個小矩形的異或!!!

【java】1738. 找出第 K 大的異或座標值---計算每個小矩形的異或!!!

給你一個二維矩陣 matrix 和一個整數 k ,矩陣大小為 m x n 由非負整陣列成。

矩陣中座標 (a, b) 的 值 可由對所有滿足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下標從 0 開始計數)執行異或運算得到。

請你找出 matrix 的所有座標中第 k 大的值(k 的值從 1 開始計數)。

示例 1:

輸入:matrix = [[5,2],[1,6]], k = 1
輸出:7
解釋:座標 (0,1) 的值是 5 XOR 2 = 7 ,為最大的值。
示例 2:

輸入:matrix = [[5,2],[1,6]], k = 2

輸出:5
解釋:座標 (0,0) 的值是 5 = 5 ,為第 2 大的值。
示例 3:

輸入:matrix = [[5,2],[1,6]], k = 3
輸出:4
解釋:座標 (1,0) 的值是 5 XOR 1 = 4 ,為第 3 大的值。
示例 4:

輸入:matrix = [[5,2],[1,6]], k = 4
輸出:0
解釋:座標 (1,1) 的值是 5 XOR 2 XOR 1 XOR 6 = 0 ,為第 4 大的值。

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 1000
0 <= matrix[i][j] <= 106

1 <= k <= m * n

程式碼:
public static int kthLargestValue(int[][] matrix, int k) {
		 Integer[]a=new Integer[matrix.length*matrix[0].length];
		 for(int i=0;i<matrix.length;i++) {
			 if(i==0) {
				a[0]=matrix[0][0];
				for(int j=1;j<matrix[0].length;j++) {
					a[j]=a[j-1]^matrix[0][j];
				}
			 }
else { a[i*matrix[0].length]=matrix[i][0]^a[(i-1)*matrix[0].length]; int sum=matrix[i][0]; for(int j=1;j<matrix[0].length;j++) { sum^=matrix[i][j]; a[i*matrix[0].length+j]=sum^a[(i-1)*matrix[0].length+j]; } } } Arrays.sort(a,(a1,a2)->a2-a1); return a[k-1]; }

在這裡插入圖片描述