Medium
Filter Restaurants by Vegan-Friendly, Price and Distance — C++
Full explanation · Time O(rlogr) · Space O(r)
// Time: O(rlogr), r is the number of result
// Space: O(r)
class Solution {
public:
vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
vector<int> result;
unordered_map<int, int> lookup;
for (int i = 0; i < restaurants.size(); ++i) {
const auto& r = restaurants[i];
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
lookup[r[0]] = i;
result.emplace_back(r[0]);
}
}
sort(result.begin(), result.end(),
[&restaurants, &lookup](const auto& i, const auto& j) {
return vector<int>{-restaurants[lookup[i]][1], -restaurants[lookup[i]][0]} <
vector<int>{-restaurants[lookup[j]][1], -restaurants[lookup[j]][0]};
});
return result;
}
};