leetcode [1329. 将矩阵按对角线排序](https://leetcode.cn/problems/sort-the-matrix-diagonally/descript

Problem: 1329. 将矩阵按对角线排序

思路

  1. 循环每条对角线
  2. 对每个对角线的数据进行排序

解题方法

  1. 找到每条对焦的起始坐标
  2. 边界判断找出每条对角线的坐标个数
  3. 使用冒泡排序对对角线数据排序

复杂度

时间复杂度:

循环每条对角线 O ( n ) O(n) O(n) * 使用冒泡排序 O ( n ) 2 O(n)^2 O(n)2 = O ( n ) 3 O(n)^3 O(n)3

空间复杂度:

原数组操作 O ( 1 ) O(1) O(1)

Code

class Solution {
    /**
     * 输入:[
     * [3,3,1,1],
     * [2,2,1,2],
     * [1,1,1,2]
     * ]
     * 输出:[
     * [1,1,1,1],
     * [1,2,2,2],
     * [1,2,3,3]
     * ]
     * @param mat
     * @return
     */
    public int[][] diagonalSort(int[][] mat) {
        int xL = mat[0].length;
        int yL = mat.length;
        // x坐标++ 
        for(int x = 0; x < xL; x ++) {
            sort(mat, 0, x, Math.min(yL, xL - x) - 1);
        }
        // y坐标++
        for(int y = 1; y < yL; y ++) {
            sort(mat, y, 0, Math.min(yL - y, xL) - 1);
        }
        return mat;
    }

    /**
     * 使用冒泡排序
     * @param mat 原数组
     * @param x 本次排序的x坐标
     * @param y 本次排序的y坐标
     * @param length 长度
     */
    public void sort(int[][] mat, int x, int y, int length) {
        int temp;
        // 使用冒泡排序
        for(int i = 0; i < length; i ++) {
            for(int j = x , k = y;j < length - i || k < length - i; j ++, k ++) {
                if(mat[j][k] > mat[j + 1][k + 1]) {
                    temp = mat[j][k];
                    mat[j][k] = mat[j + 1][k + 1];
                    mat[j + 1][k + 1] = temp;
                }
            }
        }
    }
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值