《五月集训》第22天 有序集合

Crazy_DM 2022-05-22 21:32:01

1418. 点菜展示表

解题思路:

因为一张桌子上面有很多道菜,每道菜的数量又有不同。所以我们可以构建一个桌子的哈希表(键为桌号,值为该桌子菜品的名称和数量),我们还需要表示菜品的名称和数量,所以我们又可以用一个哈希表来表示一个菜品的名称和数量(键为菜品名,值为数量)。综上我们就构建了一个二重的哈希表。再把菜品名称记录下来,桌号记录下来用来构建返回结果。

class Solution {
    int string2int(string s) {
        int sum = 0;
        for(char c: s) {
            sum *= 10;
            sum += c - '0';
        }
        return sum;
    }
public:
    vector<vector<string>> displayTable(vector<vector<string>>& orders) {
        
        unordered_set<string> menu;
        unordered_map<int, unordered_map<string, int>> hash;
        for(auto& it: orders) {
            menu.insert(it[2]);
            int tableid = string2int(it[1]);
            ++hash[tableid][it[2]];
        }
        //获取菜名
        vector<string> name;
        for(auto& n: menu) {
            name.push_back(n);
        }
        sort(name.begin(), name.end());

        //获取桌号
        vector<int> tableID;
        for(auto& [id, n]: hash) {
            tableID.push_back(id);
        }
        sort(tableID.begin(), tableID.end());

        vector<vector<string>> ret(hash.size()+1, vector<string>(menu.size()+1));
        ret[0][0] = "Table";
        copy(name.begin(), name.end(), ret[0].begin() + 1);
        for(int i = 0; i < hash.size(); ++i) {
            int id = tableID[i];
            ret[i + 1][0] = to_string(id);
            auto cnt = hash[id];
            for(int j = 0; j < menu.size(); ++j) {
                ret[i+1][j+1] = to_string(cnt[name[j]]);
            }
        }
        return ret;
    }
};

 

...全文
44 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,077

社区成员

发帖
与我相关
我的任务
社区描述
学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • 芝麻粒儿
  • Amy卜bo皮
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

QQ群:480072171

英雄算法交流 8 群

 

试试用AI创作助手写篇文章吧