Giả sử chúng ta có một danh sách các chương trình truyền hình và một danh sách thời lượng khác và một số nguyên k, ở đây hiển thị [i] và thời lượng [i] hiển thị tên và thời lượng đã xem của thứ i người, chúng tôi phải tìm tổng thời lượng đã xem của k chương trình được xem nhiều nhất.
Vì vậy, nếu đầu vào giống như các chương trình:["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], thời lượng:[6, 4 , 6, 14, 5] và k =2, thì đầu ra sẽ là 26.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một bản đồ m
-
n:=kích thước của v
-
để khởi tạo i:=0, khi i
-
m [v [i]]:=m [v [i]] + d [i]
-
-
xác định một arr mảng
-
đối với mỗi cặp khóa-giá trị, nó là m
-
chèn giá trị của nó vào cuối arr
-
-
sắp xếp mảng arr theo thứ tự ngược lại
-
ret:=0
-
để khởi tạo i:=0, khi i
-
ret:=ret + arr [i]
-
-
trả lại ret
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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