使用 C++ 按素食友好度、价格和距离过滤餐厅
假设我们有一个餐厅数组,其中 restaurants[i] 具有 [idi、ratingi、素食友好度、pricei、distancei]。我们必须使用三个过滤器过滤餐厅。
素食友好度过滤器要么为 true(意味着我们只应包括将素食友好度设置为 true 的餐厅)要么为 false(意味着我们可以包括任何餐厅)。
maxPrice 过滤器和 max distance 过滤器分别是我们应该考虑的餐厅价格和距离的最大值。
我们必须找到过滤后的餐厅 ID 数组,按评级从高到低排序。对于评级相同的餐厅,按 ID 降序排列。为简单起见,vegan friendly 和 vegan-friendly 为真时取值 1,为假时取值 0。
因此,如果输入为 restaurants −
[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]], veganFriendly = 1, maxPrice = 50, maxDistance = 10,则输出将为 [3,1,5],解释如下 −
餐厅 1 [id=1, ratings=4, veganFriendly=1, price=40, distance=10]
餐厅 2 [id=2, ratings=8, veganFriendly=0, price=50, distance=5]
餐厅 3 [id=3, ratings=8, veganFriendly=1, price=30, distance=4]
餐厅 4 [id=4, ratings=10, veganFriendly=0, price=10, distance=3]
餐厅 5 [id=5, ratings=1, veganFriendly=1, price=15, distance=1]
过滤 veganFriendly = 1、maxPrice = 50 和 maxDistance = 10 的餐厅后,我们得到餐厅 3、餐厅 1 和餐厅 5(按评分降序排列)。
为了解决这个问题,我们将遵循以下步骤 −
定义一个名为 temp 的矩阵,n := restaurants array 的大小
对于 i 在 0 到n – 1
如果 vf = 0 或 r[i, 2] = vf 且 r[i, 3] <= mp 且 r[i, 4] <= md,则
将 [r[i, 0], r[i, 1]] 插入到 temp 中
根据评分按降序对餐厅进行排序
创建一个名为 ret 的数组
i 的范围为 0 到 temp 的大小
将 temp[i, 0] 插入到 ret 中
return ret
示例 (C++)
让我们看看下面的实现以便更好地理解 −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: static bool cmp(vector <int> a, vector <int> b){ if(b[1] != a[1])return a[1] > b[1]; return a[0] > b[0]; } vector<int>filterRestaurants(vector<vector<int>>& r, int vf, int mp, int md) { vector < vector <int> > temp; int n = r.size(); for(int i = 0; i < n; i++){ if((vf == 0 || r[i][2] == vf) && r[i][3] <= mp && r[i][4] <= md){ temp.push_back({r[i][0], r[i][1]}); } } sort(temp.begin(), temp.end(), cmp); vector <int> ret; for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i][0]); return ret; } }; main(){ vector<vector<int>> v = {{1,4,1,40,10},{2,8,0,50,5},{3,8,1,30,4},{4,10,0,10,3},{5,1,1,15,1}}; Solution ob; print_vector(ob.filterRestaurants(v, 1, 50, 10)); }
输入
[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]] 1 50 10
输出
[3,1,5]