LeetCode:599.两个列表的最小索引总和

解题思路:

  • 双重循环,每个可能都遍历一次,将索引和最小的放入ans数组中
  • 哈希表,{string: int},前面放字符串,后面放字符串对应的索引下标

代码:

错误:

class Solution {
public:
    vector findRestaurant(vector& list1, vector& list2) {
        unordered_map index;
        int n = list1.size();
        for (int i = 0; i < n; i++) {
            index[list1[i]] = i;
        }

        vector ans;
        int min = INT_MAX;
        for (int i = 0; i < list2.size(); ++i) {
            if (index.count(list2[i])>0) { //存在相同的
                int m = i + index[list2[i]];
                if (m < min) {
                    ans.clear();
                    ans.emplace_back(list2[i]);
                } else if (m == min) {
                    ans.emplace_back(list2[i]);
                }
            }
        }
        return ans;
    }
};

问题所在:每次判断最小值之后,没有将min更新,导致min一直等于INT_MAX;第一个if一直成立。

解决方法 :每次有更小的min出现时,继承一下数据即可

C++:

class Solution {
public:
    vector findRestaurant(vector& list1, vector& list2) {
        unordered_map index;
        int n = list1.size();
        for (int i = 0; i < n; i++) {
            index[list1[i]] = i;
        }

        vector ans;
        int min = INT_MAX;
        for (int i = 0; i < list2.size(); ++i) {
            if (index.count(list2[i])>0) { //存在相同的
                int m = i + index[list2[i]];
                if (m < min) {
                    min = m;
                    ans.clear();
                    ans.emplace_back(list2[i]);
                } else if (m == min) {
                    ans.emplace_back(list2[i]);
                }
            }
        }
        return ans;
    }
};

python:

class Solution:
    def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
        index = {s: i for i, s in enumerate(list1)}
        ans = []
        minx = inf
        for i, s in enumerate(list2):
            if s in index:
                j = index[s]
                if i+j < minx:
                    minx = i+j
                    ans=[s]
                elif i+j == minx:
                    ans.append(s)
        return ans

你可能感兴趣的:(#,力扣,leetcode,算法,职场和发展)