diff options
author | Jack Sangdahl <[email protected]> | 2024-07-18 18:19:54 -0600 |
---|---|---|
committer | Jack Sangdahl <[email protected]> | 2024-07-18 18:19:54 -0600 |
commit | 33b75b757bc8d541a630c1b623870ff914fe2974 (patch) | |
tree | c7aa8701f5b3e4df446c58ce9cfbc417e8d571c4 | |
parent | c54acf7173416cb192f92a2fad37835d672b2110 (diff) | |
download | leetcode-33b75b757bc8d541a630c1b623870ff914fe2974.tar.gz leetcode-33b75b757bc8d541a630c1b623870ff914fe2974.zip |
1380. lucky numbers in a matrix
-rw-r--r-- | lucky_nums_matrix.c | 52 | ||||
-rw-r--r-- | lucky_nums_matrix.py | 23 |
2 files changed, 75 insertions, 0 deletions
diff --git a/lucky_nums_matrix.c b/lucky_nums_matrix.c new file mode 100644 index 0000000..689fd0d --- /dev/null +++ b/lucky_nums_matrix.c @@ -0,0 +1,52 @@ +// 1380. Lucky Numbers in a Matrix +#include "leetcode.h" + +/* + * given an 'm * n' matrix of distinct numbers, return all lucky numbers in the + * matrix in any order. a lucky number is an element of the matrix such that it + * is the minimum element in its row and maximum in its column + */ + +int *luckyNumbers(int **matrix, int matrixSize, int *matrixColSize, + int *returnSize) { + int n = 0, *ans = (int *)malloc((matrixSize + 1) * sizeof(int)); + for (int r = 0; r < matrixSize; r++) + for (int c = 0; c < *matrixColSize; c++) { + int curr = matrix[r][c]; + bool flag1 = false, flag2 = false; + for (int i = 0; !flag1 && i < *matrixColSize; i++) + if (matrix[r][i] < curr) + flag1 = true; + for (int i = 0; !flag2 && i < matrixSize; i++) + if (matrix[i][c] > curr) + flag2 = true; + if (!flag1 && !flag2) { + ans[n] = curr; + n++; + } + } + *returnSize = n; + return ans; +} + +int main() { + int m1[3][3] = {{3, 7, 8}, {9, 11, 13}, {15, 16, 17}}, + m2[3][4] = {{1, 10, 4, 2}, {9, 3, 8, 7}, {15, 16, 17, 12}}, + m3[2][2] = {{7, 8}, {1, 2}}; + int mcs1[] = {3, 3, 3}, mcs2[] = {3, 3, 3, 3}, mcs3[] = {2, 2}, rs1, rs2, rs3; + int *ln1 = luckyNumbers((int **)m1, ARRAY_SIZE(m1), mcs1, &rs1); + int *ln2 = luckyNumbers((int **)m2, ARRAY_SIZE(m2), mcs2, &rs2); + int *ln3 = luckyNumbers((int **)m3, ARRAY_SIZE(m3), mcs3, &rs3); + for (int i = 0; i < rs1; i++) + printf("%d ", ln1[i]); // expect: 15 + printf("\n"); + for (int i = 0; i < rs1; i++) + printf("%d ", ln1[i]); // expect: 15 + printf("\n"); + for (int i = 0; i < rs2; i++) + printf("%d ", ln2[i]); // expect: 12 + for (int i = 0; i < rs3; i++) + printf("%d ", ln3[i]); // expect: 7 + printf("\n"); + free(ln1), free(ln2), free(ln3); +} diff --git a/lucky_nums_matrix.py b/lucky_nums_matrix.py new file mode 100644 index 0000000..9ba1c80 --- /dev/null +++ b/lucky_nums_matrix.py @@ -0,0 +1,23 @@ +# 1380. Lucky Numbers in a Matrix + +""" +given an 'm n' matrix of distinct numbers, return all lucky numbers in the +matrix in any order. a lucky number is an element of the matrix such that it +is the minimum element in its row and maximum in its column +""" + + +class Solution(object): + def luckyNumbers(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + return list({min(row) for row in matrix} & {max(col) for col in zip(*matrix)}) + + +if __name__ == "__main__": + obj = Solution() + print(obj.luckyNumbers(matrix=[[3, 7, 8], [9, 11, 13], [15, 16, 17]])) + print(obj.luckyNumbers(matrix=[[1, 10, 4, 2], [9, 3, 8, 7], [15, 16, 17, 12]])) + print(obj.luckyNumbers(matrix=[[7, 8], [1, 2]])) |