OA原题描述参考:

注意:具体抽到的题目可能会有细微变化。

大概意思是给人推荐菜谱,input是两个二维String 数组,第一个用来存菜名和对应的菜系,第二个用来存人名和这个人喜欢的菜系,要去返回一个二维String数组,存的值是人名对应可能喜欢的菜名(如果人名后面对应的是“*”,那么就表示所有菜系都要)。


input: String[][] menu, String[][] personPreferences.
output: String[][] recommendation
example 1:
input: {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}}, {{"Peter", "Italian"}, {"Adam", "American"}}
Expected output: {{"Peter", "Pizza"}, {"Peter", "Pasta"}, {"Adam", "Burger"}}
example 2:
input: {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}}, {{"Peter", "*"}}. 
Expected output: {{"Peter", "Pizza"}, {"Peter", "Pasta"}, {"Peter", "Burger"}}

解题思路参考:

几乎没坑,就是考察基本数据结构HashMap。把菜谱存入HashMap后,对person进行循环匹配,注意*号的处理。

参考答案:

package com.amazon;

import java.util.*;

/**
 * Created by Tian on 2017/8/8.
 */
public class Dish {
    public static void main(String[] args) {
        String[][] menu = {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}};
        String[][] person = {{"Peter", "Italian"}, {"Adam", "American"}, {"YiChi", "Chinese"},
                {"Me", "*"}};

        Dish dh = new Dish();
        String[][] res = dh.recommend(menu, person);
        for (int i = 0; i < res.length; i++) {
            System.out.println(res[i][0] + "," + res[i][1]);
        }
    }

    public String[][] recommend(String[][] menu, String[][] person) {
        int mx = menu.length;
        int my = menu[0].length;

        Map<String, Set<String>> menuHash = new HashMap<String, Set<String>>();
        for (int i = 0; i < menu.length; i++) {
            if (!menuHash.containsKey(menu[i][1])) {
                Set<String> set = new HashSet<String>();
                set.add(menu[i][0]);
                menuHash.put(menu[i][1], set);
            } else {
                menuHash.get(menu[i][1]).add(menu[i][0]);
            }
        }

        List<List<String>> res = new ArrayList<List<String>>();
        for (int i = 0; i < person.length; i++) {
            if (person[i][1].equals("*")) {
                for (Set<String> set : menuHash.values()) {
                    for (String each : set) {
                        List<String> elem = new ArrayList<String>();
                        elem.add(person[i][0]);
                        elem.add(each);
                        res.add(elem);
                    }
                }
                continue;
            }
            if (!menuHash.containsKey(person[i][1])) continue;
            Set<String> set = menuHash.get(person[i][1]);
            for (String each : set) {
                List<String> elem = new ArrayList<String>();
                elem.add(person[i][0]);
                elem.add(each);
                res.add(elem);
            }
        }

        int n = res.size();
        String[][] ret = new String[n][2];
        for (int i = 0; i < n; i++) {
            ret[i][0] = res.get(i).get(0);
            ret[i][1] = res.get(i).get(1);
        }

        return ret;
    }
}

results matching ""

    No results matching ""