C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

ビーガンフレンドリー、価格、C++での距離でレストランをフィルタリング


レストラン[i]が[idi、ratingi、veganfriendly、pricei、distancei]を持っているレストランの配列があると仮定します。 3つのフィルターを使用してレストランをフィルター処理する必要があります。

  • ビーガンフレンドリーフィルターは、true(ビーガンフレンドリーがtrueに設定されているレストランのみを含める必要があることを意味します)またはfalse(任意のレストランを含めることができることを意味します)のいずれかになります。

  • maxPriceフィルターとmaxdistanceフィルターは、それぞれ考慮すべきレストランの価格と距離の最大値です。

フィルタリング後、評価の高いものから低いものの順にレストランIDの配列を見つける必要があります。同じ評価のレストランの場合は、IDの降順で並べ替えます。簡単にするために、ビーガンフレンドリーとビーガンフレンドリーは、真の場合は値1を取り、偽の場合は値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、rating =4、veganFriendly =1、price =40、distance =10]

レストラン2[id=2、rating =8、veganFriendly =0、price =50、distance =5]

レストラン3[id=3、rating =8、veganFriendly =1、price =30、distance =4]

レストラン4[id=4、rating =10、veganFriendly =0、price =10、distance =3]

レストラン5[id=5、rating =1、veganFriendly =1、price =15、distance =1]

veganFriendly =1、maxPrice =50、maxDistance =10でレストランをフィルタリングした後、レストラン3、レストラン1、レストラン5があります(評価の降順)。

これを解決するには、次の手順に従います-

  • temp、n:=レストラン配列のサイズと呼ばれる行列を定義します

  • 0からn–1の範囲のiの場合

    • vf =0またはr[i、2] =vfおよびr[i、3] <=mpおよびr[i、4] <=mdの場合、

      • [r [i、0]、r [i、1]]をtempに挿入します

  • 評価に基づいてレストランを降順で並べ替えます

  • retと呼ばれる配列を作成します

  • 0から温度のサイズまでの範囲のiの場合

    • 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]

  1. C++で任意の都市と駅の間の最大距離を見つける

    コンセプト 0からN-1までの番号が付けられたNの都市の数と、駅が配置されている都市に関して、私たちのタスクは、任意の都市とその最寄りの駅との間の最大距離を決定することです。駅のある都市は任意の順序で指定できることに注意してください。 入力 numOfCities = 6, stations = [2, 4] 出力 2 入力 numOfCities = 6, stations = [4] 出力 4 次の図は、6つの都市と、駅が緑色で強調表示されている都市を含む最初の例を示しています。したがって、この場合、最も近い駅からの最も遠い距離は2の距離で0です。したがって、最大距離は1です。

  2. C ++のdelete()とfree()

    delete() 削除演算子は、メモリの割り当てを解除するために使用されます。ユーザーには、この削除演算子によって作成されたポインター変数の割り当てを解除する権限があります。 C++言語での削除演算子の構文は次のとおりです delete pointer_variable; 割り当てられたメモリのブロックを削除する構文は次のとおりです。 delete[ ] pointer_variable; これは、C++言語での削除演算子の例です 例 #include <iostream> using namespace std; int main () {    in