• 最流行的视频创作者 第 317 场周赛 第二题


    给你两个字符串数组 creators 和 ids ,和一个整数数组 views ,所有数组的长度都是 n 。平台上第 i 个视频者是 creator[i] ,视频分配的 id 是 ids[i] ,且播放量为 views[i] 。

    视频创作者的 流行度 是该创作者的 所有 视频的播放量的 总和 。请找出流行度 最高 创作者以及该创作者播放量 最大 的视频的 id 。

        如果存在多个创作者流行度都最高,则需要找出所有符合条件的创作者。
        如果某个创作者存在多个播放量最高的视频,则只需要找出字典序最小的 id 。

    返回一个二维字符串数组 answer ,其中 answer[i] = [creatori, idi] 表示 creatori 的流行度 最高 且其最流行的视频 id 是 idi ,可以按任何顺序返回该结果。

    示例 1:

    输入:creators = ["alice","bob","alice","chris"], ids = ["one","two","three","four"], views = [5,10,5,4]
    输出:[["alice","one"],["bob","two"]]
    解释:
    alice 的流行度是 5 + 5 = 10 。
    bob 的流行度是 10 。
    chris 的流行度是 4 。
    alice 和 bob 是流行度最高的创作者。
    bob 播放量最高的视频 id 为 "two" 。
    alice 播放量最高的视频 id 是 "one" 和 "three" 。由于 "one" 的字典序比 "three" 更小,所以结果中返回的 id 是 "one" 。

    示例 2:

    输入:creators = ["alice","alice","alice"], ids = ["a","b","c"], views = [1,2,2]
    输出:[["alice","b"]]
    解释:
    id 为 "b" 和 "c" 的视频都满足播放量最高的条件。
    由于 "b" 的字典序比 "c" 更小,所以结果中返回的 id 是 "b" 。

    思路:

    这题就好像csp第三题的缩小版,有很多的信息需要保存和处理。

    对于每一个创作者,我们可以用一个结构体来存,所有的创作者就是一个结构体数组,为了建立起创作者名字和结构题的联系,可以用字符串哈希,保存他们的下标。

    每个结构体里保存播放量最高的作品。

    最后结构体排序。

    代码:

    1. class Solution {
    2. public:
    3. struct peoo{
    4. long long view,mid=-1;
    5. string cre,id;
    6. }peo[100010];
    7. static bool cmp(peoo p1,peoo p2){
    8. return p1.view>p2.view;
    9. }
    10. vector> mostPopularCreator(vector& creators, vector& ids, vector<int>& views) {
    11. mapint> mp;
    12. int idx =0;
    13. for(int i=0;isize();i++){
    14. if(mp.count(creators[i])==0){
    15. mp[creators[i]]=idx++;
    16. }
    17. int x = mp[creators[i]];
    18. peo[x].cre = creators[i];
    19. peo[x].view+=views[i];
    20. if(views[i]>peo[x].mid){
    21. peo[x].mid = views[i];
    22. peo[x].id = ids[i];
    23. }else if(views[i]==peo[x].mid){
    24. if(peo[x].id>ids[i])
    25. peo[x].id = ids[i];
    26. }
    27. }
    28. sort(peo,peo+idx,cmp);
    29. long long maxx = peo[0].view;
    30. vector> ans;
    31. for(int i=0;i
    32. vector res;
    33. if(peo[i].view==maxx){
    34. res.push_back(peo[i].cre);
    35. res.push_back(peo[i].id);
    36. }
    37. if(res.size()==0)break;
    38. ans.push_back(res);
    39. }
    40. return ans;
    41. }
    42. };

  • 相关阅读:
    Go项目目录结构介绍
    【微信小程序】创建项目
    数据解析之Xpath解析(超详细定位)
    js的同步执行
    【目标检测】MMDetection的安装与基础使用
    Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
    边缘计算是如何为元宇宙提供动力的?
    gdb调试
    从零开始搭建springboot框架
    【BOOST C++ 19 应用库】(3)Boost.Archive
  • 原文地址:https://blog.csdn.net/qq_59183443/article/details/127597889