刷题-力扣-1738. 找出第 K 大的异或坐标值

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

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

给你一个二维矩阵 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

题目分析

  1. 根据题目描述,定义(i,j)的值是前j列中前i个数字的异或,选取第k大的值
  2. 使用动态规划的思想,假设f(x,y)=f(x-1,y-1)XORf(x-1,y)XORf(x,y-1)XORmatrix[i][j]
  3. 边界条件:
    当x=0,y=0时,f(x,y)=matrix[0][0]
    当x=0时,f(x,y)=f(x,y-1)XORmatrix[x][y]
    当y=0时,f(x,y)=f(x-1,y)XORmatrix[x][y]

代码

class Solution {
public:
    int kthLargestValue(vector<vector<int>>& matrix, int k) {
        int m = matrix.size();
        int n = matrix[0].size();
        vector<vector<int>> dp(m, vector<int>(n, 0));
        vector<int> num;
        dp[0][0] = matrix[0][0];
        num.push_back(dp[0][0]);
        for (int j = 1; j < n; ++j) {
            dp[0][j] = dp[0][j - 1] ^ matrix[0][j];
            num.push_back(dp[0][j]);
        }
        for (int i = 1; i < m; ++i) {
            dp[i][0] = dp[i - 1][0] ^ matrix[i][0];
            num.push_back(dp[i][0]);
        }
        for (int i = 1; i < m; ++i) {
            for (int j = 1; j < n; ++j) {
                dp[i][j] = dp[i - 1][j - 1] ^ dp[i - 1][j] ^ dp[i][j - 1] ^ matrix[i][j];
                num.push_back(dp[i][j]);
            }
        }
        sort(num.begin(), num.end(), compare);
        return num[k - 1];
    }

private:
    static bool compare(int a, int b) { return a > b; }
};
posted @ 2021-05-19 15:17  韩亚光  阅读(53)  评论(0)    收藏  举报