[Leetcode / 해시 표 개의 인덱스의 최소] 및 (해시 맵을 적용)

문제 설명 :

가정 앤디와 도리스는 저녁 식사를 위해 식당을 선택하는 것이 좋습니다, 그리고 그들이 좋아하는 레스토랑 목록, 각 레스토랑의 이름이 문자열로 표현을 표명했다.

당신은 그들을 도울 필요가 인덱스의 최소 자신의 발견 일반적인 좋아하는 레스토랑 . 대답은 더 하나 개의 출력 모든 해답보다하고 순서를 고려하지 않는 경우. 당신은 항상 답이 있다고 가정 할 수있다.

예 1 :

입력 :
[ "쇼군", "타피오카 익스프레스", "버거 킹", "KFC"]
[ "피아 티", "토레이 파인즈 그릴", "헝그리 헌터 스테이크", "장군"]
출력 : [ "쇼군"]
 설명 : 유일한 공통 자신이 좋아하는 레스토랑 "쇼군"입니다.

예 2 :

입력 :
[ "쇼군", "타피오카 익스프레스", "버거 킹", "KFC"]
[ "KFC", "쇼군", "버거 킹"]
출력 : [ "장군은"]
 설명 : 공통 사랑이 최소의 인덱스 및 레스토랑 최소의 인덱스 1 (1 + 0)이 "장군"구비하다.

팁 :

  1. 길이 두리스트는 [1, 1,000] 내에있다.
  2. 두리스트 내의 문자열의 길이의 범위는 [1,30]에있을 것이다.
  3. 0에서 1로 인덱스를 뺀리스트의 길이.
  4. 두 목록은 중복 요소가 없습니다.

기본적인 아이디어 :

먼저 확립 반복적 인 요소와 자신의 인덱싱 및 매핑 .

그리고 가장 작은 인덱스를 찾을 수 있습니다.

리턴하기 위해 다음 인덱스 최소 인덱스의 모든 요소에 대해 동일한 스위프를 다시 획득 .

AC 코드 :

class Solution {
public:
    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
      // 找到重复的字符串,记录他们重复的元素以及对应的索引和
      map<string, int> m;
      for (int i = 0; i < list1.size(); ++i) {
        auto it = find(list2.begin(), list2.end(), list1[i]);
        if (it != list2.end()) {
          m[list1[i]] = (it - list2.begin()) + i;
        } 
      }
      // 遍历hashmap,找到最小的索引和
      int min_index = INT_MAX;
      string min_string;
      for (auto i = m.begin(); i != m.end(); ++i) {     // hashmap的iterator使用pair的方式来访问key和value
         if (i->second < min_index) {
           min_index = i->second;
           min_string = i->first;
         }
      }
      // 返回结果集
      vector<string> res;
      for (auto i = m.begin(); i != m.end(); ++i) {
        if (i->second == min_index) {
          res.push_back(i->first);
        }
      }
      return res;
    }
};

 

게시 된 137 개 원래 기사 · 원 찬양 19 ·은 10000 +를 볼

추천

출처blog.csdn.net/qq_43338695/article/details/102740420