• 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)

  • 相关阅读:
    VMware下Linux配置网络
    前端知识之查漏补缺二
    前端网络基础查漏补缺篇
    简单实现Promise
    前端知识之查漏补缺-1
    git tag
    云服务器安装node环境 mysql nginx
    js动画
    vue原理之双向绑定虚
    js的封装、继承与多态
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13396463.html
Copyright © 2020-2023  润新知