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


    1329. 将矩阵按对角线排序

    给你一个 m * n 的整数矩阵 mat ,请你将同一条对角线上的元素(从左上到右下)按升序排序后,返回排好序的矩阵。

    示例 1:

     

    输入:mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
    输出:[[1,1,1,1],[1,2,2,2],[1,2,3,3]]

    利用左对角线元素 坐标 i-j 相等的特性(右对角线元素 i+j 相等)
    把同一斜边的元素放到一个数组里排序

    class Solution {
    public:
        vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
            int n = mat.size(), m = mat[0].size();
            unordered_map<int, vector<int>> vs;
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < m; ++j)
                    vs[i - j].emplace_back(mat[i][j]);
            }
            for (auto& v : vs) sort(v.second.rbegin(), v.second.rend());
    
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < m; ++j) {
                    mat[i][j] = vs[i - j].back();
                    vs[i - j].pop_back();
                }
            }
            return mat;
        }
    };

     

    class Solution {
    public:
        vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
            if(mat.empty()) return mat;
            for(int i = 0; i < mat.size(); i++){
                vector<int> tmp;
                getValue(mat, tmp, i, 0);
                sort(tmp.begin(), tmp.end());
                setValue(mat, tmp, i, 0);
            }
    
            for(int j = 1; j < mat[0].size(); j++) {
                vector<int> tmp;
                getValue(mat, tmp, 0, j);
                sort(tmp.begin(), tmp.end());
                setValue(mat, tmp, 0, j);
            }
            return mat;
        }
    
        void getValue(vector<vector<int>>& m, vector<int>& value, int i, int j){
            int rows = m.size(), cols = m[0].size();
            while(i < rows && j < cols){
                value.push_back(m[i++][j++]);
            }
        }
    
        void setValue(vector<vector<int>>& m, vector<int>& value, int i, int j){
            int rows = m.size(), cols = m[0].size();
            int k = 0;
            while(i < rows && j < cols){
                m[i++][j++] = value[k++];
            }
        }
    };

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13493646.html

  • 相关阅读:
    C#编码标准--编码习惯
    课程九,课堂测试
    JAVAweb 分级测试
    第八周 课堂报告
    javaweb界面
    12月9日,第一次自查报告
    课程管理系统后台JAVA代码
    《程序员修炼之道+从小工到专家》读后有感
    12月9日 自查后续
    课程管理系统JAVAweb前端代码
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13493646.html
Copyright © 2020-2023  润新知