1337. The K Weakest Rows in a Matrix
Problem
Tags: Array
, Binary Search
, Sorting
, Heap (Priority Queue)
, Matrix
You are given an m x n
binary matrix mat
of 1
's (representing soldiers) and 0
's (representing civilians). The soldiers are positioned in front of the civilians. That is, all the 1
's will appear to the left of all the 0
's in each row.
A row i
is weaker than a row j
if one of the following is true:
- The number of soldiers in row
i
is less than the number of soldiers in rowj
. - Both rows have the same number of soldiers and
i < j
.
Return the indices of the k
weakest rows in the matrix ordered from weakest to strongest.
Example 1:
Input: mat =
[[1,1,0,0,0],
[1,1,1,1,0],
[1,0,0,0,0],
[1,1,0,0,0],
[1,1,1,1,1]],
k = 3
Output: [2,0,3]
Explanation:
The number of soldiers in each row is:
- Row 0: 2
- Row 1: 4
- Row 2: 1
- Row 3: 2
- Row 4: 5
The rows ordered from weakest to strongest are [2,0,3,1,4].
Example 2:
Input: mat =
[[1,0,0,0],
[1,1,1,1],
[1,0,0,0],
[1,0,0,0]],
k = 2
Output: [0,2]
Explanation:
The number of soldiers in each row is:
- Row 0: 1
- Row 1: 4
- Row 2: 1
- Row 3: 1
The rows ordered from weakest to strongest are [0,2,3,1].
Constraints:
m == mat.length
n == mat[i].length
2 <= n, m <= 100
1 <= k <= m
matrix[i][j]
is either 0 or 1.
Code
JS
// 1337. The K Weakest Rows in a Matrix (5/22/54204)
// Runtime: 100 ms (27.90%) Memory: 43.72 MB (87.33%)
/**
* @param {number[][]} mat
* @param {number} k
* @return {number[]}
*/
function kWeakestRows(mat, k) {
return mat
.map((_, idx) => idx)
.sort((a, b) => mat[a].lastIndexOf(1) - mat[b].lastIndexOf(1))
.slice(0, k);
};
TS
// 1337. The K Weakest Rows in a Matrix (5/19/54204)
// Runtime: 94 ms (51.01%) Memory: 44.96 MB (68.53%)
function kWeakestRows(mat: number[][], k: number): number[] {
const map = mat.map((row, idx) => [idx, row.filter(n => n).length]);
map.sort((a, b) => a[1] - b[1]);
return map.slice(0, k).map(x => x[0]);
};