Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

点菜展示表 #137

Open
yankewei opened this issue Jul 6, 2021 · 1 comment
Open

点菜展示表 #137

yankewei opened this issue Jul 6, 2021 · 1 comment
Labels
中等 题目难度为中等 哈希表 题目包含哈希表解法 排序 题目包含排序解法

Comments

@yankewei
Copy link
Owner

yankewei commented Jul 6, 2021

给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。

请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。

注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。

示例 1:

输入:orders = [["David","3","Ceviche"],["Corina","10","Beef Burrito"],["David","3","Fried Chicken"],["Carla","5","Water"],["Carla","5","Ceviche"],["Rous","3","Ceviche"]]
输出:[["Table","Beef Burrito","Ceviche","Fried Chicken","Water"],["3","0","2","1","0"],["5","0","1","0","1"],["10","1","0","0","0"]] 
解释:
点菜展示表如下所示:
Table,Beef Burrito,Ceviche,Fried Chicken,Water
3    ,0           ,2      ,1            ,0
5    ,0           ,1      ,0            ,1
10   ,1           ,0      ,0            ,0
对于餐桌 3:David 点了 "Ceviche" 和 "Fried Chicken",而 Rous 点了 "Ceviche"
而餐桌 5:Carla 点了 "Water" 和 "Ceviche"
餐桌 10:Corina 点了 "Beef Burrito" 

示例 2:

输入:orders = [["James","12","Fried Chicken"],["Ratesh","12","Fried Chicken"],["Amadeus","12","Fried Chicken"],["Adam","1","Canadian Waffles"],["Brianna","1","Canadian Waffles"]]
输出:[["Table","Canadian Waffles","Fried Chicken"],["1","2","0"],["12","0","3"]] 
解释:
对于餐桌 1:Adam 和 Brianna 都点了 "Canadian Waffles"
而餐桌 12:James, Ratesh 和 Amadeus 都点了 "Fried Chicken"

示例 3:

输入:orders = [["Laura","2","Bean Burrito"],["Jhon","2","Beef Burrito"],["Melissa","2","Soda"]]
输出:[["Table","Bean Burrito","Beef Burrito","Soda"],["2","1","1","1"]]

提示:

  • 1 <= orders.length <= 5 * 10^4
  • orders[i].length == 3
  • 1 <= customerNamei.length, foodItemi.length <= 20
  • customerNamei 和 foodItemi 由大小写英文字母及空格字符 ' ' 组成。
  • tableNumberi 是 1 到 500 范围内的整数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/display-table-of-food-orders-in-a-restaurant
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

@yankewei yankewei added 中等 题目难度为中等 哈希表 题目包含哈希表解法 排序 题目包含排序解法 labels Jul 6, 2021
@yankewei
Copy link
Owner Author

yankewei commented Jul 6, 2021

哈希表

go语言的map没有php的数据方便,哈哈,但是要注意返回类型,必须是string

class Solution {

    /**
     * @param String[][] $orders
     * @return String[][]
     */
    function displayTable($orders) {
        $ret = [['Table']];
        // 保存所有的餐品
        $foods = [];
        // 保存所有的桌号
        $tables = [];
        // 生成一个嵌套数据,数据key是桌号,value是一个数组,value的key是餐品名称,value的value是餐品数量
        $cntByFoodByTable = [];
        foreach ($orders as $order) {
            if (isset($cntByFoodByTable[$order[1]])) {
                $cntByFood = $cntByFoodByTable[$order[1]];
                if (isset($cntByFood[$order[2]])) {
                    $cntByFood[$order[2]] = $cntByFood[$order[2]] + 1;
                } else {
                    $cntByFood[$order[2]] = 1;
                }
                $cntByFoodByTable[$order[1]] = $cntByFood;
            } else {
                $cntByFoodByTable[$order[1]][$order[2]] = 1;
            }
            $foods[] = $order[2];
            $tables[] = $order[1];
        }
        $foods = array_unique($foods);
        sort($foods);
        $tables = array_unique($tables);
        sort($tables);

        foreach ($foods as $food) {
            $ret[0][] = $food;
        }
        foreach ($tables as $table) {
            $row = [];
            $row[] = $table;
            foreach ($foods as $food) {
                $row[] = isset($cntByFoodByTable[$table][$food]) ? $cntByFoodByTable[$table][$food] : 0;
            }
            $ret[] = $row;
        }
        return $ret;
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
中等 题目难度为中等 哈希表 题目包含哈希表解法 排序 题目包含排序解法
Projects
None yet
Development

No branches or pull requests

1 participant