zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SAP实施方法与过程——ASAP
    标准SAP中的物料类型
    SMARTFORM报表程序设计(2)
    SMARTFORM报表程序设计(1)
    关于c#中的Timer控件的简单用法
    SAP Connector 3.0 .Net 开发
    SAP MRP的计算步骤
    PP常见数据表
    实战项目:通过当当API将订单抓取到SAP(二)
    实战项目:通过当当API将订单抓取到SAP(一)
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13493646.html
Copyright © 2011-2022 走看看