按C ++中的素食主义者,价格和距离筛选餐厅
假设我们有许多餐馆,其中餐馆[i]有[idi,Ratingi,素食主义者,pricei,distancei]。我们必须使用三个过滤器过滤餐馆。
素食主义者过滤器将为true(表示我们应只包括素食主义者设置为true的餐馆)或false(意味着我们可以包括任何餐馆)。
maxPrice过滤器和maxdistance过滤器是分别应考虑的餐厅价格和距离的最大值。
我们必须在过滤后找到饭店ID的数组,并按从高到低的等级排序。对于具有相同评分的餐厅,请按ID降序排列。为简单起见,纯素食主义者和纯素食主义者在值为true时为1,在值为false时为0。
所以如果输入就像餐馆-
[[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,评分=4,veganFriendly=1,价格=40,距离=10]
餐厅2[id=2,评分=8,veganFriendly=0,价格=50,距离=5]
餐厅3[id=3,评分=8,veganFriendly=1,价格=30,距离=4]
餐厅4[id=4,评分=10,veganFriendly=0,价格=10,距离=3]
餐厅5[id=5,评分=1,veganFriendly=1,价格=15,距离=1]
在用veganFriendly=1,maxPrice=50和maxDistance=10过滤餐馆后,我们得到了餐馆3,餐馆1和餐馆5(按等级从高到低排序)。
为了解决这个问题,我们将遵循以下步骤-
定义一个名为temp的矩阵,n:=餐厅数组的大小
对于i,范围为0至n–1
将[r[i,0],r[i,1]]插入temp
如果vf=0或r[i,2]=vf且r[i,3]<=mp和r[i,4]<=md,则
根据评分,以降序对餐厅进行排序
制作一个称为ret的数组
对于我在0到温度范围内的范围
将temp[i,0]插入ret
返回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]