问:
给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。
请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。
如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。
军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。
原题链接:https://leetcode.cn/problems/the-k-weakest-rows-in-a-matrix/
例:
输入: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
输出:[2,0,3]
答:
class Solution {
public int[] kWeakestRows(int[][] mat, int k) {
int n = mat[0].length;
int m = mat.length;
int[][] num = new int[m][2];
for(int i = 0;i < m;i++)
{
int count = 0;
for(int j = 0;j < n;j++)
{
count += mat[i][j];
}
num[i] = new int[]{count,i};
}
Arrays.sort(num,new Comparator<int[]>()
{
public int compare(int[] a,int[] b){
if(b[0] != a[0])
return a[0] - b[0];
return a[1] - b[1];
}
});
int[] a = new int[k];
for(int i = 0;i < k;i++)
a[i] = num[i][1];
return a;
}
}