按C ++中的素食主义者,价格和距离筛选餐厅

假设我们有许多餐馆,其中餐馆[i]有[idi,Ratingi,素食主义者,pricei,distancei]。我们必须使用三个过滤器过滤餐馆。

  • 素食主义者过滤器将为true(表示我们应只包括素食主义者设置为true的餐馆)或false(意味着我们可以包括任何餐馆)。

  • maxPrice过滤器和max distance过滤器是分别应考虑的餐厅价格和距离的最大值。

我们必须在过滤后找到饭店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]