使用 C++ 按素食友好度、价格和距离过滤餐厅

c++server side programmingprogramming

假设我们有一个餐厅数组,其中 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]

相关文章