Computer >> Máy Tính >  >> Lập trình >> C ++

Lọc các nhà hàng theo Thân thiện với người ăn chay, Giá cả và Khoảng cách trong C ++

Giả sử chúng ta có một mảng các nhà hàng trong đó các nhà hàng [i] có [idi, ratingi, thuần chay thân thiện, pricei, distancei]. Chúng tôi phải lọc các nhà hàng bằng ba bộ lọc.

  • Bộ lọc thân thiện với người ăn chay sẽ là true (có nghĩa là chúng tôi chỉ nên bao gồm các nhà hàng có bộ lọc thân thiện với người ăn chay được đặt thành true) hoặc sai (nghĩa là chúng tôi có thể bao gồm bất kỳ nhà hàng nào).

  • Bộ lọc maxPrice và bộ lọc khoảng cách tối đa là giá trị tối đa cho giá cả và khoảng cách của các nhà hàng mà chúng ta nên xem xét tương ứng.

Chúng ta phải tìm dãy ID nhà hàng sau khi lọc, được sắp xếp theo xếp hạng từ cao nhất đến thấp nhất. Đối với các nhà hàng có cùng xếp hạng, hãy sắp xếp theo id theo thứ tự giảm dần. Để đơn giản, thân thiện với người ăn chay và thân thiện với người ăn chay, hãy lấy giá trị 1 khi nó đúng và 0 khi nó sai.

Vì vậy, nếu đầu vào giống như nhà hàng -

[[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, thì đầu ra sẽ là [3,1,5], giải thích như sau -

Nhà hàng 1 [id =1, rating =4, veganFriendly =1, price =40, distance =10]

Nhà hàng 2 [id =2, rating =8, veganFriendly =0, price =50, distance =5]

Nhà hàng 3 [id =3, rating =8, veganFriendly =1, price =30, distance =4]

Nhà hàng 4 [id =4, rating =10, veganFriendly =0, price =10, distance =3]

Nhà hàng 5 [id =5, rating =1, veganFriendly =1, price =15, distance =1]

Sau khi lọc các nhà hàng có veganFriendly =1, maxPrice =50 và maxDistance =10, chúng tôi có nhà hàng 3, nhà hàng 1 và nhà hàng 5 (được sắp xếp theo xếp hạng theo thứ tự giảm dần).

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định ma trận được gọi là temp, n:=kích thước của mảng nhà hàng

  • cho tôi trong phạm vi từ 0 đến n - 1

    • nếu vf =0 hoặc r [i, 2] =vf và r [i, 3] <=mp và r [i, 4] <=md thì

      • insert [r [i, 0], r [i, 1]] vào temp

  • Sắp xếp các nhà hàng theo thứ tự giảm dần dựa trên xếp hạng

  • tạo một mảng được gọi là ret

  • cho tôi trong phạm vi từ 0 đến kích thước của nhiệt độ

    • chèn temp [i, 0] vào ret

  • trả lại ret

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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

Đầu vào

[[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

Đầu ra

[3,1,5]