Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 목록의 최소 인덱스 합계

<시간/>

Amal과 Bimal이 저녁 식사를 위해 식당을 선택하려고 하는 두 사람이 있다고 가정해 보겠습니다. 이제 두 사람 모두 좋아하는 식당 목록이 문자열로 표시됩니다. 우리는 그들이 최소한의 목록 색인 합계로 공통 관심사를 찾도록 도와야 합니다. 다른 답변 사이에 선택 동점이 있는 경우 주문 요구 사항 없이 모두를 반환합니다.

따라서 입력이 ["ABC","PQR","MNO","XYZ"] 및 ["TUV","GHI","KLM","ABC"]인 경우 출력은 [ "ABC"]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 하나의 맵 MP 정의

  • 최소 :=inf

  • initialize i :=0의 경우, i

    • j 초기화의 경우:=0, j

      • l1[i]가 l2[j]와 같으면 -

        • mp[i + j]

          끝에 l1[i] 삽입
  • 배열 res

    정의
  • it =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, ]