টিভি শোদের তালিকা, প্রতিটি ব্যক্তির দেখা সময় এবং একটি সংখ্যা k দেওয়া আছে। সবচেয়ে বেশি দেখা করা kটি শোর মোট দর্শনের সময় বের করতে হবে।
উদাহরণ
শো: ["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"]
সময়: [6, 4, 6, 14, 5], k = 2
"Castle Play" মোট ১২ মিনিট, "Jerry Mouse" ১৪ মিনিট দেখা হয়েছে। টপ-২-এর মোট = ১২ + ১৪ = 26।
সমাধানের পদ্ধতি
- একটি ম্যাপ ব্যবহার করে প্রতিটি শোর মোট দর্শনের সময় জমা করুন।
- সময়গুলো একটি ভেক্টরে নিয়ে নেমিক ক্রমে সাজান।
- প্রথম
kটি সময়ের যোগফল বের করুন।
C++ বাস্তবায়ন
#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);
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: শো তালিকা, সময় তালিকা, k=2
আউটপুট: 26
সময় জটিলতা
O(n log n) - ম্যাপে ইনসারশন এবং সোর্টিং-এর জন্য।