难度:简单。
标签:数组,二分查找,矩阵,排序,堆(优先队列)。
正确解法:
class Solution {
int getNum(vector<int>& vec){
int n = vec.size();
int left = 0, right = n - 1, ans = n;
while(left <= right){
int mid = (left + right) / 2;
if(vec[mid] == 0){
ans = mid;
right = mid - 1;
}
else if(vec[mid] == 1){
left = mid + 1;
}
}
return ans;
}
static bool cmp(pair<int, int>& a, pair<int, int>& b){
if(a.second == b.second){
return a.first < b.first;
}
return a.second < b.second;
}
public:
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<pair<int, int>> arr(mat.size());
for(int i = 0; i < mat.size(); ++i){
arr[i] = make_pair(i, getNum(mat[i]));
}
sort(arr.begin(), arr.end(), cmp);
vector<int> ans(k);
for(int i = 0; i < k; ++i)ans[i] = arr[i].first;
return ans;
}
};
结果: