五月集训(第11天)— 矩阵

矩阵

1. 1351. 统计有序矩阵中的负数

    思路:
        大水题,直接遍历数组统计即可

int countNegatives(int** grid, int gridSize, int* gridColSize){
    int ans = 0;
    int r = gridSize, col = gridColSize[0];
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < col; j++) {
            if (grid[i][j] < 0) ans++;
        }
    }
    return ans;
}

2. 1672. 最富有客户的资产总量

    思路:
        统计每一行的和,记录各行的最大值。

class Solution {
public:
    int maximumWealth(vector<vector<int>>& accounts) {
        int ans = 0, sum = 0;
        int r = accounts.size(), col;
        for (int i = 0; i < r; i++) {
            col = accounts[i].size();
            sum = 0;
            for (int j = 0; j < col; j++) {
                sum += accounts[i][j];
            }
            ans = max(ans, sum);
        }
        return ans;
    }
};

3. 832. 翻转图像

    思路:
        水题,不多说。

class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
        int n = image[0].size();
        int half_n = n / 2;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < half_n; j++) {
                swap(image[i][j], image[i][n - 1 - j]);
                image[i][j] = !image[i][j];
                image[i][n - 1 - j] = !image[i][n - 1 - j];
            }
            if (n&1) image[i][half_n] = !image[i][half_n];
        }
        return image;
    }
};

4. 1329. 将矩阵按对角线排序

    思路:
        利用每条主对角线i - j的值相同的性质(副对角线i + j相同)。取出每条对角线的值,排序后放回。

class Solution {
public:
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
        int r = mat.size();
        int col = mat[0].size();
        unordered_map<int, vector<int>> mmp;

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < col; j++) {
                mmp[i - j].emplace_back(mat[i][j]);
            }
        }
        // 升序排列
        for (auto &m : mmp) {
            auto &vec = m.second;
            sort(vec.begin(), vec.end(), greater<int>());
        }
        // 逆序取出(从后往前拿)
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < col; j++) {
                mat[i][j] = mmp[i - j].back();
                mmp[i - j].pop_back();
            }
        }
        return mat;
    }
};
posted @ 2022-05-11 07:54  番茄元  阅读(3)  评论(0)    收藏  举报