1337. 矩阵中战斗力最弱的 K 行 力扣(简单) 确实简单,结构体排序,二分也可

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;
    }
};

 

posted on 2021-08-01 19:41  Yxter  阅读(74)  评论(0编辑  收藏  举报

导航