LeetCode //C - 1030. Matrix Cells in Distance Order

1030. Matrix Cells in Distance Order

You are given four integers row, cols, rCenter, and cCenter. There is a rows x cols matrix and you are on the cell with the coordinates (rCenter, cCenter).

Return the coordinates of all cells in the matrix, sorted by their distance from (rCenter, cCenter) from the smallest distance to the largest distance. You may return the answer in any order that satisfies this condition.

The distance between two cells ( r 1 , c 1 ) (r_1, c_1) (r1,c1) and ( r 2 , c 2 ) (r_2, c_2) (r2,c2) is ∣ r 1 − r 2 ∣ + ∣ c 1 − c 2 ∣ |r_1 - r_2| + |c_1 - c_2| ∣r1−r2∣+∣c1−c2∣.

Example 1:

Input: rows = 1, cols = 2, rCenter = 0, cCenter = 0
Output: \[0,0,0,1]
Explanation: The distances from (0, 0) to other cells are: 0,1

Example 2:

Input: rows = 2, cols = 2, rCenter = 0, cCenter = 1
Output: \[0,1,0,0,1,1,1,0]
Explanation: The distances from (0, 1) to other cells are: 0,1,1,2

The answer \[0,1,1,1,0,0,1,0] would also be accepted as correct.

Example 3:

Input: rows = 2, cols = 3, rCenter = 1, cCenter = 2
Output: \[1,2,0,2,1,1,0,1,1,0,0,0]
Explanation: The distances from (1, 2) to other cells are: 0,1,1,2,2,3

There are other answers that would also be accepted as correct, such as \[1,2,1,1,0,2,1,0,0,1,0,0].

Constraints:
  • 1 <= rows, cols <= 100
  • 0 <= rCenter < rows
  • 0 <= cCenter < cols

From: LeetCode

Link: 1030. Matrix Cells in Distance Order


Solution:

Ideas:
  • Store every cell with its Manhattan distance to (rCenter, cCenter).
  • Sort all cells by distance.
  • Build the required int** result array.
Code:
c 复制代码
typedef struct {
    int r;
    int c;
    int dist;
} Cell;

static int cmp(const void *a, const void *b) {
    Cell *x = (Cell *)a;
    Cell *y = (Cell *)b;
    return x->dist - y->dist;
}

/**
 * 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** allCellsDistOrder(int rows, int cols, int rCenter, int cCenter, int* returnSize, int** returnColumnSizes) {
    int total = rows * cols;
    *returnSize = total;

    Cell *cells = (Cell *)malloc(sizeof(Cell) * total);
    int idx = 0;

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cells[idx].r = i;
            cells[idx].c = j;
            cells[idx].dist = abs(i - rCenter) + abs(j - cCenter);
            idx++;
        }
    }

    qsort(cells, total, sizeof(Cell), cmp);

    int **result = (int **)malloc(sizeof(int *) * total);
    *returnColumnSizes = (int *)malloc(sizeof(int) * total);

    for (int i = 0; i < total; i++) {
        result[i] = (int *)malloc(sizeof(int) * 2);
        result[i][0] = cells[i].r;
        result[i][1] = cells[i].c;
        (*returnColumnSizes)[i] = 2;
    }

    free(cells);
    return result;
}
相关推荐
SuperByteMaster12 分钟前
timer.c 介绍
c语言
半夏微凉半夏殇1 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565121 小时前
数学之美探究
算法
oier_Asad.Chen1 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
leisoo80973 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17685 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5555 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴5 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆6 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill