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

更新日期: 2020 年 9 月 2 日

411 次浏览

开启你的 职业生涯

完成课程,获得认证

开始吧
广告