用C++编写的电视节目

假设我们有一个电视节目列表,另一个持续时间列表,以及一个整数k,在这里显示[i]和duration [i]显示第i个人观看的姓名和观看时间,我们必须找到观看的总时间观看次数最多的k个节目。

因此,如果输入如下所示:[“城堡戏”,“童话系列”,“城堡戏”,“杰里·鼠标”,“富翁男孩”],持续时间:[6、4、6、14、5]并且k = 2,则输出将为26。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一张映射

  • n:= v的大小

  • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

    • m [v [i]]:= m [v [i]] + d [i]

  • 定义一个数组

  • 对于每个键值对,它的m

    • 在arr的末尾插入它的值

  • 以相反的顺序对数组arr进行排序

  • ret:= 0

  • 对于初始化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