leetcode1329--将矩阵按对角线排序

1. 题意

对角线排序

2. 题解

2.1 直接模拟

跟螺旋输出数组实际上有点像,这里需要枚举对角线数组的起始值。

cpp 复制代码
class Solution {
public:
    void sort_dia(int br, int bc, vector<vector<int>> &mat) {
        vector<int> tmp;

        int r = mat.size();
        int c = mat[0].size();
        
        int cr = br;
        int cc = bc; 
        while ( cr < r && cc < c) {
            tmp.emplace_back( mat[cr][cc] );
            cr++,cc++;
        }
        sort(tmp.begin(), tmp.end());
        cr = br, cc = bc;

        int idx = 0;
        while ( cr < r && cc < c ) {
            mat[cr][cc] = tmp[idx];
            cr++,cc++,idx++;
        }
    }

    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {


        int r = mat.size();
        int c = mat[0].size();

        vector<vector<int>> ans;

        int cr = r - 1;
        int cc = 0;
        while (  cc < c) {
            if (cr) {
                sort_dia(cr, cc, mat);
                cr--;
                continue;
            }

            sort_dia(cr, cc, mat);
            cc++;
        }

        return vector<vector<int>>(mat);
    }
};

2.2 模拟+确定其实位置关系

同一对角线的位置

i − j = k i-j=k i−j=k, k k k为一定值。

所以我们只需要枚举 k k k即可。

cpp 复制代码
class Solution {
public:
    
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {


        int r = mat.size();
        int c = mat[0].size();


        int br;
        int bc;

        vector<int> tmp(max(r,c), 0);
        // k = br - bc 
        // 
        for ( int k = 1 - c; k < r; ++k) {
            k >= 0 ? br = k : br = 0;
            bc = br - k ;
           
            int len = min(r - br, c - bc);
            
            for (int i = br; i < br + len;++i) {
                tmp[i - br] = mat[i][i - k];
            }
            sort(tmp.begin(), tmp.begin() + len);
            
            for (int i = br;i < br + len; ++i) {
                mat[i][ i - k ] = tmp[i - br];
            }
        }

        return vector<vector<int>>(mat);
    }
};

3. 参考

0x3f

相关推荐
通信小呆呆2 小时前
以矩阵视角统一理解:外积、Kronecker 积与 Khatri–Rao 积(含MATLAB可视化)
线性代数·算法·matlab·矩阵·信号处理
爱学习的小鱼gogo9 小时前
python 单词搜索(回溯-矩阵-字符串-中等)含源码(二十)
开发语言·数据结构·python·矩阵·字符串·回溯·递归栈
熬了夜的程序员12 小时前
【LeetCode】82. 删除排序链表中的重复元素 II
数据结构·算法·leetcode·链表·职场和发展·矩阵·深度优先
前端小L14 小时前
动态规划的“降维”艺术:二维矩阵中的建筑奇迹——最大矩形
线性代数·矩阵
小龙15 小时前
【理论知识】Q/K/V权重矩阵学习笔记
矩阵·大模型·transformer·多头注意力机制·理论基础
无限进步_15 小时前
【C语言】在矩阵中高效查找数字的算法解析
c语言·开发语言·数据结构·c++·其他·算法·矩阵
张晓~183399481212 天前
碰一碰发抖音源码技术搭建部署方案
线性代数·算法·microsoft·矩阵·html5
woshihonghonga2 天前
PyTorch矩阵乘法函数区别解析与矩阵高级索引说明——《动手学深度学习》3.6.3、3.6.4和3.6.5 (P79)
人工智能·pytorch·python·深度学习·jupyter·矩阵
郝学胜-神的一滴2 天前
矩阵的奇异值分解(SVD)及其在计算机图形学中的应用
程序人生·线性代数·算法·矩阵·图形渲染
豆沙沙包?3 天前
2025年--Lc201- 378. 有序矩阵中第 K 小的元素(排序)--Java版
java·线性代数·矩阵