Medium

Filter Restaurants by Vegan-Friendly, Price and DistanceC++

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;
    }
};