Cho danh sách các chương trình TV, danh sách thời lượng tương ứng và số nguyên k. shows[i] và duration[i] lần lượt là tên và thời lượng người thứ i xem. Cần tìm tổng thời lượng của k chương trình được xem nhiều nhất.
Ví dụ: shows: ["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], duration: [6, 4, 6, 14, 5], k = 2. Kết quả là 26.
Các bước giải quyết:
- Dùng
mapđể cộng dồn thời lượng cho mỗi chương trình. - Đưa các giá trị thời lượng vào mảng
arr. - Sắp xếp
arrgiảm dần. - Tổng
kphần tử đầu tiên củaarr.
Ví dụ
#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));
}
Đầu vào
{"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"}, {6, 4, 6, 14, 5}, 2
Đầu ra
26