1337. 矩阵中战斗力最弱的 K 行
给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。
请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。
如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。
军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。
题解:
由于题中说1在前,可以由二分查找确定其位置,速度加快
代码:
class Solution { public: struct node { int k,row; }; static bool cmp(node a,node b) { if (a.k!=b.k) return a.k<b.k; else return a.row<b.row; } vector<int> kWeakestRows(vector<vector<int>>& mat, int k) { int l=mat.size(); node a[105]; for(int i=0;i<l;i++) { a[i].row=i; a[i].k=0; // 不能缺少,否则原始k是非0的 for(auto j:mat[i]) if (j==1) a[i].k++; else break; } sort(a,a+l,cmp); vector<int> res; for(int i=0;i<k;i++) res.push_back(a[i].row); return res; } };