Leetcode---1418点菜展示表

这一题主要考察的就是数据的存储和处理,思路其实很简单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

思路很简单,需要注意的是:

  1. 第一行要手动添加“Table”列名;
  2. 桌子编号是升序排列;
  3. 菜名是按字母序排列;

其他的就按部就班的处理即可。
不知道具体是什么原因,在进行排序时,我最先使用的是优先队列进行排序(用的比较少,所以想多用一用),但是都没能达到想要的结果,白给两次。。。后面换成Collections.sort()对列表进行排序才AC;
算法步骤:

  1. 使用Set存储菜名,使用Map存储每桌的点菜信息
  2. 每当遇到一个菜名,判断其是否在已有的菜单meal中,没有的话进行添加;
  3. 每当遇到一个桌号,判断其是否在map中,没有的话直接添加到map中并添加点菜信息,且菜的数量直接置为1即可;有的话需要先判断是否一定点过当前的菜,点过的话直接进行累加,没有的话进行添加;
  4. 下面是对数据进行处理,首先手动添加"Table"到title列表中,然后把Set集合meal中的数据转存到l1中,然后对l1中的数据进行排序将其结果依次存到title中,然后将title存到结果列表ans中;
  5. 对于每一桌的信息,首先对桌号进行排序(与对菜名进行排序一样,首先将桌号转存到l2中,然后对l2进行排序),然后按照桌号升序的顺序对每一桌的信息进行处理
  6. 因为前面处理过的l1列表是按照字母序排列的菜名,所以直接依次获取对应菜名在当前桌的信息即可,有的话则是对应的数量,没有的话是0;将每一桌的信息依次添加到结果列表ans中;
  7. 最后返回ans;

代码

class Solution {
    public List<List<String>> displayTable(List<List<String>> orders) {
        int len = orders.size();
        //存储菜名
        Set<String> meal = new HashSet<>();

        //分别存储桌子编号和菜品
        Map<Integer,Map<String, Integer>> map = new HashMap<>();
        for(List<String> i : orders)
        {
            int tab_id = Integer.parseInt(i.get(1));
            String meal_name = i.get(2);

            //检查菜名是否出现过,未出现过则添加到set
            if (!meal.contains(meal_name))
                meal.add(meal_name);

            //检查是否出现过该桌
            if (!map.containsKey(tab_id))
            {
                Map<String, Integer> cur = new HashMap<>();
                cur.put(meal_name,1);
                map.put(tab_id,cur);
            }
            else
            {
                Map<String, Integer> cur = map.get(tab_id);
                int n = cur.get(meal_name)==null?0:cur.get(meal_name);
                cur.put(meal_name,n+1);
                map.put(tab_id,cur);
            }
        }

        //在答案中添加第一行
        List<List<String>> ans = new ArrayList<>();
        List<String> title = new ArrayList<>();
        List<String> l1 = new ArrayList<>();
        l1.addAll(meal);
        Collections.sort(l1);
        title.add("Table");
        title.addAll(l1);

        ans.add(title);

        //在答案中添加对应的数据
        List<Integer> l2 = new ArrayList<>();
        l2.addAll(map.keySet());
        Collections.sort(l2);

        for (int i : l2)
        {
            List<String> ll = new ArrayList<>();
            Map<String, Integer> m = map.get(i);
            ll.add(String.valueOf(i));
            for (String j : l1)
            {
                String str = m.get(j)==null?"0":String.valueOf(m.get(j));
                ll.add(str);
            }
            ans.add(ll);
        }


        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值