最流行的视频创作者 第 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第三题的缩小版,有很多的信息需要保存和处理。

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

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

最后结构体排序。

代码:

class Solution {
public:
    struct peoo{
        long long view,mid=-1;
        string cre,id;
        
    }peo[100010];
    static bool cmp(peoo p1,peoo p2){
        return p1.view>p2.view;
    }
    vector<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) {
        map<string,int> mp;
        int idx =0;
        for(int i=0;i<creators.size();i++){
            if(mp.count(creators[i])==0){
                mp[creators[i]]=idx++;
            }
            int x = mp[creators[i]];
            peo[x].cre = creators[i];
            peo[x].view+=views[i];
            if(views[i]>peo[x].mid){
                peo[x].mid = views[i];
                peo[x].id = ids[i];
            }else if(views[i]==peo[x].mid){
                if(peo[x].id>ids[i])
                peo[x].id = ids[i];
            }
        }
        sort(peo,peo+idx,cmp);
        long long maxx = peo[0].view;
        vector<vector<string>> ans;
        
        for(int i=0;i<idx;i++){
            vector<string> res;
            if(peo[i].view==maxx){
                res.push_back(peo[i].cre);
                res.push_back(peo[i].id);
            }
            if(res.size()==0)break;
            ans.push_back(res);
        }
        return ans;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河边采花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值