矩阵中战斗力最弱的k行
二分+优先队列
每行二分查找最后1的位置,优先队列取出前k个出现1次数最小的行号
class Solution {
public:
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
int n = mat.size(), m = mat[0].size();
vector<pair<int,int>> p;
for (int i = 0; i < n; i ++ )
{
int l = 0, r = m - 1, pos = -1;
while (l <= r){
int mid = l + r >> 1;
if (mat[i][mid] == 0) r = mid - 1;
else pos = mid, l = mid + 1;
}
p.emplace_back(r + 1, i);
}
priority_queue q(greater<pair<int, int>>(), move(p));
vector<int>res;
for (int i = 0; i < k; i ++ )
{
res.emplace_back(q.top().second);
q.pop();
}
return res;
}
};
本文介绍了一种结合二分查找与优先队列的数据结构算法,用于解决矩阵中寻找战斗力最弱的k行的问题。该算法首先通过二分查找确定每行1的数量,再利用优先队列找出具有最少1的前k行。
1558

被折叠的 条评论
为什么被折叠?



