C ++中两个列表的最小索引和

假设有两个恶魔,阿玛尔(Amal)和比玛尔(Bimal)想选择一家餐厅作为晚餐,现在他们俩都有用字符串表示的最喜欢的餐厅列表。我们必须帮助他们找出列表索引和最少的共同利益。如果不同答案之间存在选择关系,则将其全部返回,而无需订购。

因此,如果输入类似于[“ ABC”,“ PQR”,“ MNO”,“ XYZ”]和[“ TUV”,“ GHI”,“ KLM”,“ ABC”],则输出将为[ “ ABC”]

为了解决这个问题,我们将遵循以下步骤-

  • 定义一张映射mp

  • 至少:= inf

  • 对于初始化i:= 0,当i <l1的大小时,更新(将i增加1),执行-

    • 如果l1 [i]与l2 [j]相同,则-

    • 在mp [i + j]的末尾插入l1 [i]

    • 对于初始化j:= 0,当j <l2的大小时,更新(将j增加1),执行-

    • 定义数组res

    • 它= mp的第一个元素

    • res:=它的值

    • 返回资源

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
    public:
       vector<string> findRestaurant(vector<string>& l1, vector<string>& l2) {
          map<int, vector<string> > mp;
          int least = INT_MAX;
          for (int i = 0; i < l1.size(); i++)
             for (int j = 0; j < l2.size(); j++)
                if (l1[i] == l2[j])
                   mp[i + j].push_back(l1[i]);
          vector<string> res;
          auto it = mp.begin();
          res = it->second;
          return res;
       }
    };
    main(){
       Solution ob;
       vector<string> v = {"ABC","PQR","MNO","XYZ"}, v1 = {"TUV","GHI","KLM","ABC"};
       print_vector(ob.findRestaurant(v, v1));
    }

    输入值

    {"ABC","PQR","MNO","XYZ"}, {"TUV","GHI","KLM","ABC"}

    输出结果

    [ABC, ]