代码拉取完成,页面将自动刷新
// Time: O((w * b) * log(w * b))
// Space: O(w * b)
class Solution {
public:
vector<int> assignBikes(vector<vector<int>>& workers, vector<vector<int>>& bikes) {
using P = vector<int>;
vector<vector<P>> distances(workers.size());
for (int i = 0; i < workers.size(); ++i) {
for (int j = 0; j < bikes.size(); ++j) {
distances[i].push_back({manhattan(workers[i], bikes[j]), i, j});
}
sort(distances[i].begin(), distances[i].end(), greater<P>());
}
vector<int> result(workers.size());
unordered_set<int> lookup;
priority_queue<P, vector<P>, greater<P>> min_heap;
for (int i = 0; i < workers.size(); ++i) {
min_heap.emplace(distances[i].back());
distances[i].pop_back();
}
while (lookup.size() < workers.size()) {
const auto worker = min_heap.top()[1];
const auto bike = min_heap.top()[2];
min_heap.pop();
if (!lookup.count(bike)) {
result[worker] = bike;
lookup.emplace(bike);
} else {
min_heap.emplace(distances[worker].back());
distances[worker].pop_back();
}
}
return result;
}
private:
int manhattan(const vector<int>& p1, const vector<int>& p2) {
return abs(p1[0] - p2[0]) + abs(p1[1] - p2[1]);
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。