题目链接:https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix/
想了半天没想明白跟二分有什么关系,看了题解才明白,用二分先找每一行最后一个军人(查找1)
代码如下:
class Solution {
public:
int power(vector<int> v) {
int l = 0, r = v.size() - 1;
while(l <= r) {
int mid = (l + r) / 2;
if(v[mid] == 1) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return r;
}
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<pair<int, int> > p;
//记录 O(nlgm)
for(int i = 0; i < mat.size(); i++) {
p.push_back({power(mat[i]), i});
}
sort(p.begin(), p.end());
//排序 O(nlgn)
vector<int> res;
for(int i = 0; i < k; i++) {
res.push_back(p[i].second);
}
return res;
}
};