สมมติว่าเรามีรายการรายการทีวี และรายการระยะเวลาอื่น และจำนวนเต็ม 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