返回介绍

solution / 1400-1499 / 1418.Display Table of Food Orders in a Restaurant / README

发布于 2024-06-17 01:03:19 字数 7555 浏览 0 评论 0 收藏 0

1418. 点菜展示表

English Version

题目描述

给你一个数组 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
  • customerNameifoodItemi 由大小写英文字母及空格字符 ' ' 组成。
  • tableNumberi1500 范围内的整数。

解法

方法一

class Solution:
  def displayTable(self, orders: List[List[str]]) -> List[List[str]]:
    tables = set()
    foods = set()
    mp = Counter()
    for _, table, food in orders:
      tables.add(int(table))
      foods.add(food)
      mp[f'{table}.{food}'] += 1
    foods = sorted(list(foods))
    tables = sorted(list(tables))
    res = [['Table'] + foods]
    for table in tables:
      t = [str(table)]
      for food in foods:
        t.append(str(mp[f'{table}.{food}']))
      res.append(t)
    return res
class Solution {
  public List<List<String>> displayTable(List<List<String>> orders) {
    Set<Integer> tables = new HashSet<>();
    Set<String> foods = new HashSet<>();
    Map<String, Integer> mp = new HashMap<>();
    for (List<String> order : orders) {
      int table = Integer.parseInt(order.get(1));
      String food = order.get(2);
      tables.add(table);
      foods.add(food);
      String key = table + "." + food;
      mp.put(key, mp.getOrDefault(key, 0) + 1);
    }
    List<Integer> t = new ArrayList<>(tables);
    List<String> f = new ArrayList<>(foods);
    Collections.sort(t);
    Collections.sort(f);
    List<List<String>> res = new ArrayList<>();
    List<String> title = new ArrayList<>();
    title.add("Table");
    title.addAll(f);
    res.add(title);
    for (int table : t) {
      List<String> tmp = new ArrayList<>();
      tmp.add(String.valueOf(table));
      for (String food : f) {
        tmp.add(String.valueOf(mp.getOrDefault(table + "." + food, 0)));
      }
      res.add(tmp);
    }
    return res;
  }
}
class Solution {
public:
  vector<vector<string>> displayTable(vector<vector<string>>& orders) {
    unordered_set<int> tables;
    unordered_set<string> foods;
    unordered_map<string, int> mp;
    for (auto& order : orders) {
      int table = stoi(order[1]);
      string food = order[2];
      tables.insert(table);
      foods.insert(food);
      ++mp[order[1] + "." + food];
    }
    vector<int> t;
    t.assign(tables.begin(), tables.end());
    sort(t.begin(), t.end());
    vector<string> f;
    f.assign(foods.begin(), foods.end());
    sort(f.begin(), f.end());
    vector<vector<string>> res;
    vector<string> title;
    title.push_back("Table");
    for (auto e : f) title.push_back(e);
    res.push_back(title);
    for (int table : t) {
      vector<string> tmp;
      tmp.push_back(to_string(table));
      for (string food : f) {
        tmp.push_back(to_string(mp[to_string(table) + "." + food]));
      }
      res.push_back(tmp);
    }
    return res;
  }
};
func displayTable(orders [][]string) [][]string {
  tables := make(map[int]bool)
  foods := make(map[string]bool)
  mp := make(map[string]int)
  for _, order := range orders {
    table, food := order[1], order[2]
    t, _ := strconv.Atoi(table)
    tables[t] = true
    foods[food] = true
    key := table + "." + food
    mp[key] += 1
  }
  var t []int
  var f []string
  for i := range tables {
    t = append(t, i)
  }
  for i := range foods {
    f = append(f, i)
  }
  sort.Ints(t)
  sort.Strings(f)
  var res [][]string
  var title []string
  title = append(title, "Table")
  for _, e := range f {
    title = append(title, e)
  }
  res = append(res, title)
  for _, table := range t {
    var tmp []string
    tmp = append(tmp, strconv.Itoa(table))
    for _, food := range f {
      tmp = append(tmp, strconv.Itoa(mp[strconv.Itoa(table)+"."+food]))
    }
    res = append(res, tmp)
  }
  return res
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文