C++ 中的電視節目
假設我們有一組電視節目和一組時長列表以及一個整數 k,其中 shows[i] 和 duration[i] 表示第 i 個人的觀看節目和時長,我們需要找到觀看次數最多的 k 個節目的總時長。
因此,如果輸入類似於 shows: ["城堡播放", "童話劇集", "城堡播放", "傑瑞鼠", "富家男孩"], duration: [6, 4, 6, 14, 5] 和 k = 2,那麼輸出將是 26。
要解決此問題,我們將按照以下步驟操作
定義一個 map
n := v 的大小
for 初始化 i := 0,當 i < n,更新(i 加 1),執行以下操作:
m[v[i]] := m[v[i]] + d[i]
定義一個數組 arr
for m 的每個鍵值對 it
在 arr 的末尾插入 it 的值
按降序對陣列 arr 進行排序
ret := 0
for 初始化 i := 0,當 i < k,更新(i 加 1),執行以下操作:
ret := ret + arr[i]
返回 ret
我們看看以下實現以更好地理解 -
示例
#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
廣告