diff --git a/solution/1300-1399/1380.Lucky Numbers in a Matrix/README.md b/solution/1300-1399/1380.Lucky Numbers in a Matrix/README.md index 9e1179eaedd60..9872b9b0b9b6c 100644 --- a/solution/1300-1399/1380.Lucky Numbers in a Matrix/README.md +++ b/solution/1300-1399/1380.Lucky Numbers in a Matrix/README.md @@ -180,25 +180,24 @@ func luckyNumbers(matrix [][]int) (ans []int) { ```ts function luckyNumbers(matrix: number[][]): number[] { - const m = matrix.length; - const n = matrix[0].length; - const rows: number[] = new Array(m).fill(1 << 30); - const cols: number[] = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans: number[] = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; } ``` @@ -210,25 +209,24 @@ function luckyNumbers(matrix: number[][]): number[] { * @return {number[]} */ var luckyNumbers = function (matrix) { - const m = matrix.length; - const n = matrix[0].length; - const rows = new Array(m).fill(1 << 30); - const cols = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; }; ``` diff --git a/solution/1300-1399/1380.Lucky Numbers in a Matrix/README_EN.md b/solution/1300-1399/1380.Lucky Numbers in a Matrix/README_EN.md index 541f37076eb83..df449eaa0ae23 100644 --- a/solution/1300-1399/1380.Lucky Numbers in a Matrix/README_EN.md +++ b/solution/1300-1399/1380.Lucky Numbers in a Matrix/README_EN.md @@ -173,25 +173,24 @@ func luckyNumbers(matrix [][]int) (ans []int) { ```ts function luckyNumbers(matrix: number[][]): number[] { - const m = matrix.length; - const n = matrix[0].length; - const rows: number[] = new Array(m).fill(1 << 30); - const cols: number[] = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans: number[] = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; } ``` @@ -203,25 +202,24 @@ function luckyNumbers(matrix: number[][]): number[] { * @return {number[]} */ var luckyNumbers = function (matrix) { - const m = matrix.length; - const n = matrix[0].length; - const rows = new Array(m).fill(1 << 30); - const cols = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; }; ``` diff --git a/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.js b/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.js index 35010e1bfadd7..687a07f56ddfe 100644 --- a/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.js +++ b/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.js @@ -3,23 +3,22 @@ * @return {number[]} */ var luckyNumbers = function (matrix) { - const m = matrix.length; - const n = matrix[0].length; - const rows = new Array(m).fill(1 << 30); - const cols = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; }; diff --git a/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.ts b/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.ts index 76d320a825041..ad468bf245eac 100644 --- a/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.ts +++ b/solution/1300-1399/1380.Lucky Numbers in a Matrix/Solution.ts @@ -1,21 +1,20 @@ function luckyNumbers(matrix: number[][]): number[] { - const m = matrix.length; - const n = matrix[0].length; - const rows: number[] = new Array(m).fill(1 << 30); - const cols: number[] = new Array(n).fill(0); - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - rows[i] = Math.min(rows[i], matrix[i][j]); - cols[j] = Math.max(cols[j], matrix[i][j]); - } - } - const ans: number[] = []; - for (let i = 0; i < m; ++i) { - for (let j = 0; j < n; j++) { - if (rows[i] === cols[j]) { - ans.push(rows[i]); + const [m, n] = [matrix.length, matrix[0].length]; + const mins = Array(n); + + for (let i = 0; i < n; i++) { + let [max, iMax] = [Number.NEGATIVE_INFINITY, -1]; + + for (let j = 0; j < m; j++) { + if (matrix[j][i] > max) { + max = matrix[j][i]; + iMax = j; } } + + mins[iMax] ??= Math.min(...matrix[iMax]); + if (mins[iMax] === max) return [max]; } - return ans; + + return []; }