1329. 将矩阵按对角线排序
矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。
给你一个 m * n 的整数矩阵 mat ,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排好序的矩阵。
示例 1:

|
|
示例 2:
|
|
提示:
m == mat.lengthn == mat[i].length1 <= m, n <= 1001 <= mat[i][j] <= 100
普通题,但是耗时太久.
思路就是按照提示找到同一斜边的元素,arraylist排序,写回去。
问题在于找到同一斜边的元素,注意边界。我将遍历过程分成两段,分别是下三角和上三角,利用mat[i][j]的条件i<m&&j<n来控制边界。
|
|
看了题解,所有的同一斜边的元素有一个共同特征:i和j的差为定值,也就是说,给定i,j唯一确定是哪一条对角线,一共m+n-1个对角线,创建m+n-1个arraylist。
对每一条对角线上的元素进行排序。
填回去的操作:按照从左到右,从上往下遍历时,每次都是最小的在前,可以另外用一个数组保存,或者也可以将arraylist转成栈,按次序填回去的数一定是从小到大的。
别人的code:
|
|