zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    SpringBlade 端口占用 Web server failed to start. Port 80 was already in use.
    SpringBlade 找不到或无法加载主类 springboot.Application
    Java idea 常用快捷键
    Java Velocity
    个人 一些需求
    Java MyBatis-Plus 基本使用
    Java Spring Initializr 创建的项目 包是一层一层的,需要隐藏一下空包
    MapReduce之自定义OutputFormat
    数据链路层之PPP协议
    MapReduce之GroupingComparator分组(辅助排序、二次排序)
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13396463.html
Copyright © 2011-2022 走看看