สมมติว่าเรามีคำสั่งซื้อแบบอาร์เรย์ ซึ่งแสดงถึงคำสั่งซื้อที่ลูกค้าทำในร้านอาหาร ดังนั้น orders[i]=[cust_namei, table_numi, food_itemi] โดยที่ cust_namei คือชื่อลูกค้า table_numi คือหมายเลขโต๊ะของลูกค้า และ food_itemi คือรายการสินค้าที่ลูกค้าสั่ง
เราต้องคืน "โต๊ะแสดง" ของร้านอาหาร ในที่นี้ “โต๊ะแสดงผล” คือตารางที่มีรายการอาหารในแถวที่ระบุว่าแต่ละโต๊ะสั่งอาหารกี่รายการ คอลัมน์แรกจะเป็นหมายเลขตาราง และคอลัมน์ที่เหลือจะสอดคล้องกับรายการอาหารแต่ละรายการตามลำดับตัวอักษร แถวแรกควรเป็นส่วนหัวที่มีคอลัมน์แรกคือ "ตาราง" ตามด้วยชื่ออาหาร
ดังนั้น หากอินพุตเป็นเหมือนคำสั่ง =[["Amal","3","Paratha"],["Bimal","10","Biryni"],["Amal","3","Fried Chicken "],["Raktim","5","Water"],["Raktim","5","Paratha"],["Deepak","3","Paratha"]] แล้วผลลัพธ์จะ เป็น [["Table","Biryni","Fried Chicken","Paratha","Water"],["3","0","1","2","0"],["5 ","0","0","1","1"],["10","1","0","0","0"]]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งแผนที่ m
-
กำหนดชื่อชุดหนึ่งชุด
-
กำหนดหนึ่งชุด t
-
สำหรับแต่ละองค์ประกอบตามลำดับรายการ
-
ใส่[1] ลงใน t
-
โอเค :=จริง
-
ถ้าตกลงเป็นเท็จ −
-
v =อาร์เรย์หลังจากแยกมัน[2]โดยใช้ช่องว่าง
-
สำหรับแต่ละองค์ประกอบ x ใน v ทำ
-
(เพิ่ม m[it[1], x] ขึ้น 1)
-
ใส่ x ลงในชื่อ
-
-
-
มิฉะนั้น
-
(เพิ่ม m[it[1], it[2]] โดย 1)
-
ใส่[2]ลงในชื่อ
-
-
-
กำหนดอาร์เรย์ 2D ret หนึ่งรายการ
-
กำหนดอาร์เรย์ชั่วคราวและคัดลอกองค์ประกอบจากชื่อ
-
แทรก "Table" เป็นองค์ประกอบแรกใน temp
-
ใส่ temp ที่ท้าย ret
-
สำหรับแต่ละองค์ประกอบใน t ทำ
-
กำหนดอาร์เรย์ te
-
ใส่ที่ส่วนท้ายของ te
-
สำหรับแต่ละองค์ประกอบ x ในชื่อ ทำ
-
แทรก m[it, x] เป็นสตริงที่ส่วนท้ายของ te
-
-
ใส่ te ที่ส่วนท้ายของ ret
-
-
จัดเรียงอาร์เรย์ ret
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<string> > v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
vector <string> split(string& s, char delimiter){
vector <string> tokens;
string token;
istringstream tokenStream(s);
while(getline(tokenStream, token, delimiter)){
tokens.push_back(token);
}
return tokens;
}
static bool cmp(vector <string>& a, vector <string>& b){
lli an = stol(a[0]);
lli bn = stol(b[0]);
return an < bn;
}
vector<vector<string>> displayTable(vector<vector<string>>& o) {
map <string, map < string, int> >m;
set <string> names;
set <string> t;
for(auto &it : o){
t.insert(it[1]);
bool ok = true;
if(!ok){
vector <string> v = split(it[2], ' ');
for(auto& x : v){
m[it[1]][x]++;
names.insert(x);
}
}
else{
m[it[1]][it[2]]++;
names.insert(it[2]);
}
}
vector < vector <string> > ret;
vector <string> temp(names.begin(), names.end());
temp.insert(temp.begin(), "Table");
ret.push_back(temp);
for(auto& it : t){
vector <string> te;
te.push_back(it);
for(auto& x : names){
te.push_back(to_string(m[it][x]));
}
ret.push_back(te);
}
sort(ret.begin() + 1, ret.end(), cmp);
return ret;
}
};
main(){
Solution ob;
vector<vector<string>> v = {{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried
Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}};
print_vector(ob.displayTable(v));
} อินพุต
{{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}} ผลลัพธ์
[[Table, Biryni, Fried Chicken, Paratha, Water, ],[3, 0, 1, 2, 0, ],[5, 0, 0, 1, 1, ],[10, 1, 0, 0, 0, ],]