文章目录
0. Leetcode 1418. 点菜展示表
给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。
请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。
注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。
分析与解答
找准映射关系与键值顺序即可:
class Solution {
public:
vector<vector<string>> displayTable(vector<vector<string>>& orders) {
map<string, map<string, int>> table2Food; // 每桌点的所有食物
set<string> foods;
set<int> table;
vector<vector<string>> result;
for (int i = 0; i < orders.size(); ++i) {
// 每一个顾客
vector<string> curOrder = orders[i]; // 获取顾客姓名,桌号与餐品
table2Food[curOrder[1]][curOrder[2]]++;
foods.insert(curOrder[2]); // 加入餐品名
table.insert(stoi(curOrder[1])); // 加入zh
}
// 构建结果集
// 第一行
vector<string> curRow;
curRow.push_back("Table");
for (auto food: foods) {
curRow.push_back(food);
}
result.push_back(curRow);
// 每桌订单
for (auto tableId: table) {
curRow.clear();
curRow.push_back(to_string(tableId));
map<string, int> curTableOrder = table2Food[to_string(tableId)];
for (auto food: foods) {
auto ite = curTableOrder.find(food);
if (ite == curTableOrder.end()) {
curRow.push_back("0");
} else {
curRow.push_back(to_string(ite->second));
}
}
result.push_back(curRow);
}
return result;
}
};
1. Leetcode 363. 矩形区域不超过 K 的最大数值和
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
题目数据保证总会存在一个数值和不超过 k 的矩形区域。
分析与解答
暂时没有思路…
code
算法时间复杂度为 O ( N ) O(N) O(N)