leetcode 3446. 按对角线进行矩阵排序 中等

给你一个大小为 n x n 的整数方阵 grid。返回一个经过如下调整的矩阵:

  • 左下角三角形 (包括中间对角线)的对角线按 非递增顺序排序。
  • 右上角三角形 的对角线按 非递减顺序排序。

示例 1:

输入: grid = \[1,7,3,9,8,2,4,5,6]

输出: \[8,2,3,9,6,7,4,5,1]

解释:

标有黑色箭头的对角线(左下角三角形)应按非递增顺序排序:

  • [1, 8, 6] 变为 [8, 6, 1]
  • [9, 5][4] 保持不变。

标有蓝色箭头的对角线(右上角三角形)应按非递减顺序排序:

  • [7, 2] 变为 [2, 7]
  • [3] 保持不变。

示例 2:

输入: grid = \[0,1,1,2]

输出: \[2,1,1,0]

解释:

标有黑色箭头的对角线必须按非递增顺序排序,因此 [0, 2] 变为 [2, 0]。其他对角线已经符合要求。

示例 3:

输入: grid = \[1]

输出: \[1]

解释:

只有一个元素的对角线已经符合要求,因此无需修改。

提示:

  • grid.length == grid[i].length == n
  • 1 <= n <= 10
  • -10^5 <= grid[i][j] <= 10^5

分析:由于矩阵的规模很小,可以直接模拟。用一个数组存储对角线的元素并按照右上对角线非递减顺序,左下角对角线非递增排序,排好序后再存回原数组即可。

cpp 复制代码
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int cmp_1(const void *a,const void *b)
{
    return *(int*)a-*(int*)b;
}
int cmp_2(const void *a,const void *b)
{
    return *(int*)b-*(int*)a;
}
int** sortMatrix(int** grid, int gridSize, int* gridColSize, int* returnSize, int** returnColumnSizes) {
    int n=gridSize;
    *returnSize=n;
    *returnColumnSizes=(int*)malloc(sizeof(int)*n);
    for(int i=0;i<n;++i)(*returnColumnSizes)[i]=n;

    for(int i=0;i<n;++i)
    {
        int temp_1[n-i+5],temp_2[n-i+5];
        for(int j=0,k=i;j<n-i;++j,++k)
            temp_2[j]=grid[k][j],temp_1[j]=grid[j][k];
        qsort(temp_2,n-i,sizeof(int),cmp_2);
        qsort(temp_1,n-i,sizeof(int),cmp_1);
        for(int j=0,k=i;j<n-i;++j,++k)
            grid[j][k]=temp_1[j],grid[k][j]=temp_2[j];
    }
    return grid;
}
相关推荐
怪兽学LLM13 小时前
LeetCode 21 合并两个有序链表:彻底理解虚拟头节点(Dummy)套路
python·leetcode·链表
_日拱一卒13 小时前
LeetCode:22括号生成
算法·leetcode·职场和发展
洛水水14 小时前
【力扣100题】88.多数元素
数据结构·算法·leetcode
洛水水14 小时前
【力扣100题】87.只出现一次的数字
数据结构·算法·leetcode
风筝在晴天搁浅15 小时前
LeetCode CodeTop 82.删除排序链表中的重复元素Ⅱ
算法·leetcode·链表
洛水水15 小时前
【力扣100题】84.字符串解码
算法·leetcode·职场和发展
洛水水16 小时前
【力扣100题】89.下一个排列
数据结构·算法·leetcode
洛水水16 小时前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
alphaTao16 小时前
LeetCode 每日一题 2026/6/8-2026/6/14
算法·leetcode
想吃火锅10051 天前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展