मान लीजिए हमारे पास टीवी शो की एक सूची है, और दूसरी सूची अवधि की है, और एक पूर्णांक k है। यहाँ shows[i] और duration[i] i-वें व्यक्ति द्वारा देखे गए शो का नाम और अवधि दर्शाते हैं। हमें k सबसे अधिक देखे गए शो की कुल अवधि ज्ञात करनी है।
उदाहरण के लिए, यदि इनपुट है: shows: ["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], duration: [6, 4, 6, 14, 5] और k = 2, तो आउटपुट 26 होगा।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- एक मैप
mपरिभाषित करें जो शो के नाम को कुंजी और कुल अवधि को मान के रूप में संग्रहीत करेगा। n := v का आकारi := 0सेn-1तक लूप चलाएं:m[v[i]] := m[v[i]] + d[i]
- एक सरणी
arrपरिभाषित करें। - मैप
mके प्रत्येक कुंजी-मान युग्म के लिए, मान कोarrके अंत में डालें। arrको अवरोही क्रम में सॉर्ट करें।ret := 0i := 0सेk-1तक लूप चलाएं:ret := ret + arr[i]
retलौटाएं।
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;
}
इनपुट
{"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"}, {6, 4, 6, 14, 5}, 2
आउटपुट
26