题目链接:https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix/
题意:
给你一个大小为
m * n
的矩阵mat
,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的
k
行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。
军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。
方法:利用向量,存储1的个数和索引,然后利用向量进行升序排序,取前k个元素
class Solution {
public:
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<pair<int,int>> vct;//存储1的个数和索引值
int len1 = mat.size();//有几行
int len2 = mat[0].size();//有几列
for(int i=0;i<len1;i++)
{
int cnt = 0;//计数器,记录1的个数
for(int j=0;j<len2;j++)
{
if(mat[i][j]==0) break;//0的话就退出循环
cnt++;
}
vct.push_back({cnt,i});//将1的个数和索引插入向量
}
sort(vct.begin(),vct.end());//利用向量升序排序
vector<int> ret;
for(int i=0;i<k;i++)
{
ret.emplace_back(vct[i].second);
}
return ret;
}
};