⭐️
# 題目敘述
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].
# 解題思路
用 sorting 去完成。
# Solution
import java.util.Arrays; | |
class Solution { | |
public int[] kWeakestRows(int[][] mat, int k) { | |
int m = mat.length; | |
int[][] rowAdd = new int[m][2]; | |
for(int i = 0; i < m; i++){ | |
int add = 0; | |
for(int num : mat[i]){ | |
add += num; | |
} | |
rowAdd[i][0] = add; | |
rowAdd[i][1] = i; | |
} | |
Arrays.sort(rowAdd, (a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]); | |
int[] ans = new int[k]; | |
for(int i = 0; i < k; i++){ | |
ans[i] = rowAdd[i][1]; | |
} | |
return ans; | |
} | |
} |
單字
** **
!! !!
片語 & 搭配詞
!! !!