知识星球 英雄算法联盟 五月集训 矩阵对角线排序

 


目录

 一、题目

1、题目描述

2、基础框架

3、原题链接

二、解题报告

1、思路分析

2、代码详解

三、本题小知识

 


 一、题目


1、题目描述

  

矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。

给你一个 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]]


示例 2:

输入:mat = [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
输出:[[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

2、基础框架

   Java 版本给出的基础框架代码如下:   

class Solution {
    public int[][] diagonalSort(int[][] mat) {
}

提示:

  •     m == mat.length
  •     n == mat[i].length
  •     1 <= m, n <= 100
  •     1 <= mat[i][j] <= 100

3、原题链接

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

二、解题报告


1、思路分析

冒泡排序的思想

定义方法把同一对角线上最大值放在对角线的最后位置

多次调用该方法依次把最大值最后,把次大放在倒数第二……从而达到排序


2、代码详解

class Solution {
    public int[][] diagonalSort(int[][] mat) {
        //多次调用方法sortFun(),依次找到最大、次大、次次大、、、
        //显然最多调用次数位列数
         for(int i=0;i<mat[0].length;i++){
              sortFun(mat);
         } 
         return mat;
    }
    //定义一个把对角线上最大元素,沉底的方法
    public void sortFun(int [][]mat){
        for(int i=0;i<mat.length-1;i++){
            for(int j=0;j<mat[0].length-1;j++){
                if(mat[i][j]>mat[i+1][j+1]){
                    int t=mat[i][j];
                    mat[i][j]=mat[i+1][j+1];
                    mat[i+1][j+1]=t;
                }
            }  
        }
    }
}

三、本题小知识

  矩阵,排序

猜你喜欢

转载自blog.csdn.net/qq_43846797/article/details/124707985