aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Sangdahl <[email protected]>2024-07-18 18:19:54 -0600
committerJack Sangdahl <[email protected]>2024-07-18 18:19:54 -0600
commit33b75b757bc8d541a630c1b623870ff914fe2974 (patch)
treec7aa8701f5b3e4df446c58ce9cfbc417e8d571c4
parentc54acf7173416cb192f92a2fad37835d672b2110 (diff)
downloadleetcode-33b75b757bc8d541a630c1b623870ff914fe2974.tar.gz
leetcode-33b75b757bc8d541a630c1b623870ff914fe2974.zip
1380. lucky numbers in a matrix
-rw-r--r--lucky_nums_matrix.c52
-rw-r--r--lucky_nums_matrix.py23
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]]))