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

Tổng chỉ mục tối thiểu của hai danh sách trong C ++

Giả sử có hai quái vật Amal và Bimal muốn chọn một nhà hàng để ăn tối, bây giờ cả hai đều có danh sách các nhà hàng yêu thích được biểu diễn bằng chuỗi. Chúng tôi phải giúp họ tìm ra mối quan tâm chung của họ với tổng chỉ mục danh sách ít nhất. Nếu có sự ràng buộc về sự lựa chọn giữa các câu trả lời khác nhau, thì hãy trả lại tất cả chúng mà không yêu cầu thứ tự.

Vì vậy, nếu đầu vào là ["ABC", "PQR", "MNO", "XYZ"] và ["TUV", "GHI", "KLM", "ABC"], thì đầu ra sẽ là [ "ABC"]

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

  • Xác định một bản đồ mp

  • ít nhất:=inf

  • để khởi tạo i:=0, khi tôi

    • để khởi tạo j:=0, khi j

      • nếu l1 [i] giống với l2 [j] thì -

        • chèn l1 [i] vào cuối mp [i + j]

  • Xác định res một mảng

  • it =phần tử đầu tiên của mp

  • res:=giá trị của nó

  • trả lại res

Ví dụ

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

Đầu vào

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

Đầu ra

[ABC, ]