สมมติว่าเรามีรายการรายการทีวี และรายการระยะเวลาอื่น และจำนวนเต็ม k ที่นี่แสดง[i] และ Duration[i] แสดงชื่อและระยะเวลาที่ดูโดย ith เราต้องหาระยะเวลาดูรวมของรายการที่มีคนดูมากที่สุด k รายการ
ดังนั้น หากอินพุตเป็นแบบที่แสดง:["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], ระยะเวลา:[6, 4 , 6, 14, 5] และ k =2 ผลลัพธ์จะเป็น 26
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งแผนที่ m
-
n :=ขนาดของวี
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
m[v[i]] :=m[v[i]] + d[i]
-
-
กำหนดอาร์เรย์ arr
-
สำหรับแต่ละคู่ของคีย์-ค่า m
-
ใส่ค่าที่ท้าย arr
-
-
เรียงลำดับอาร์เรย์ arr ในลำดับย้อนกลับ
-
ยกเลิก :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน
-
ret :=ret + arr[i]
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(vector<string>& v, vector<int>& d, int k) { map <string, int> m; int n = v.size(); for(int i = 0; i < n; i++){ m[v[i]] += d[i]; } vector < int > arr; for(auto it : m){ arr.push_back(it.second); } sort(arr.rbegin(), arr.rend()); int ret = 0; for(int i = 0; i < k; i++){ ret += arr[i]; } return ret; } }; int main(){ vector<string> v = {"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"}; vector<int> v1 = {6, 4, 6, 14, 5}; Solution ob; cout << (ob.solve(v, v1, 2)); }
อินพุต
{"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"}, {6, 4, 6, 14, 5}, 2
ผลลัพธ์
26