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
广告