• 599. Minimum Index Sum of Two Lists


    Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings.

    You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.

    Example 1:

    Input:
    ["Shogun", "Tapioca Express", "Burger King", "KFC"]
    ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
    Output: ["Shogun"]
    Explanation: The only restaurant they both like is "Shogun".
    

    Example 2:

    Input:
    ["Shogun", "Tapioca Express", "Burger King", "KFC"]
    ["KFC", "Shogun", "Burger King"]
    Output: ["Shogun"]
    Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).
    

    Note:

    1. The length of both lists will be in the range of [1, 1000].
    2. The length of strings in both lists will be in the range of [1, 30].
    3. The index is starting from 0 to the list length minus 1.
    4. No duplicates in both lists.
    class Solution {
        public String[] findRestaurant(String[] list1, String[] list2) {
            List<String> res = new ArrayList();
            List<String> l2 = Arrays.asList(list2);
            int min = 2000;
            
            for(int i = 0; i < list1.length; i++) {
                int ind = l2.indexOf(list1[i]);
                if(ind >= 0) {
                    if(ind + i < min) {
                        res.clear();
                        res.add(list1[i]);
                        min = ind + i;
                    }
                    else if(ind + i == min) res.add(list1[i]);
                }
            }
            String[] r = new String[res.size()];
            int i = 0;
            for(String s: res) r[i++] = s;
            return r;
        }
    }

    brute force

    public class Solution {
        public String[] findRestaurant(String[] list1, String[] list2) {
            HashMap < String, Integer > map = new HashMap < String, Integer > ();
            for (int i = 0; i < list1.length; i++) map.put(list1[i], i);        
            List < String > res = new ArrayList < > ();
            int min_sum = 4000int sum = 0;
            for (int j = 0; j < list2.length; j++) {
                if (map.containsKey(list2[j])) {
                    sum = j + map.get(list2[j]);
                    if (sum < min_sum) {
                        res.clear();
                        res.add(list2[j]);
                        min_sum = sum;
                    } else if (sum == min_sum)
                        res.add(list2[j]);
                }
            }
            return res.toArray(new String[res.size()]);
        }
    }

    用hashmap,O(l1 + l2)

  • 相关阅读:
    让电脑中的文件后缀显示完整
    [trie][异或] hdu 6625 three arrays
    [全排列] hdu 6628 permutation 1
    [模板][最大流]dinic
    [模板]矩阵十进制快速幂
    CCPC-Wannafly Summer Camp 2019 Day1
    [技巧]ARubbish
    [dp]第十届蓝桥杯国赛CB组C
    [暴力]分块
    [模板]主席树及其应用
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13396463.html
Copyright © 2020-2023  润新知