最流行的视频创作者

简介: 最流行的视频创作者

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你两个字符串数组 creatorsids ,和一个整数数组 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" 。

提示:

  • n == creators.length == ids.length == views.length
  • 1 <= n <= 105
  • 1 <= creators[i].length, ids[i].length <= 5
  • creators[i]ids[i] 仅由小写英文字母组成
  • 0 <= views[i] <= 105

思路分析

首先我们要先理解一下题目的意思,题目会我们一个数组 两个字符串数组 creatorsids ,和一个整数数组 views,所有数组的长度都是 n 。平台上第 i 个视频者是 creator[i] ,视频分配的 id 是 ids[i] ,且播放量为 views[i]

我们需要在给出的信息中找出流行度 最高 创作者以及该创作者播放量 最大 的视频的 id,其中视频创作者的 流行度 是该创作者的 所有 视频的播放量的 总和

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

所以我们可以先统计每个作者的流行度,并记录其播放量最大的视频id,统计的过程中可以先记录下流行度最高的数值,统计完之后便可以在统计完的数据中找出流行度最高的数值。

  • 1、统计每个作者的流行度

以作者名称为key,统计每个作者的流行度,并记录下每个作者播放量最高的视频id;max为最高流行度的数值。

let map = {},max = 0;
for(let i = 0; i < creators.length; i++){
    if(map[creators[i]]){
         if(map[creators[i]].id > ids[i]){
            map[creators[i]].id = ids[i];
         }
         map[creators[i]].views = map[creators[i]].views + views[i];
         if(map[creators[i]].max < views[i] || (map[creators[i]].max == views[i] && map[creators[i]].maxid > ids[i])){
            map[creators[i]].max = views[i];
            map[creators[i]].maxid = ids[i];
         }
         max = Math.max(max,map[creators[i]].views);
    }else{
         map[creators[i]] = {};
         map[creators[i]].id = ids[i];
         map[creators[i]].views = views[i];
         map[creators[i]].max = views[i];
         map[creators[i]].maxid = ids[i];
         max = Math.max(max,views[i]);
    }
}
  • 2、找出流行度最高的作者

在作者统计数据中找到与统计后记录的流行度最高数值相等的作者信息数据。

const res = [];
    for(let key in map){
         if(map[key].views == max){
             res.push([key,map[key].maxid]);
         }
    }
 return  res;

完整AC代码如下:

AC代码

/**
 * @param {string[]} creators
 * @param {string[]} ids
 * @param {number[]} views
 * @return {string[][]}
 */
 var mostPopularCreator = function(creators, ids, views) {
     let map = {},max = 0;
     for(let i = 0; i < creators.length; i++){
         if(map[creators[i]]){
             if(map[creators[i]].id > ids[i]){
                map[creators[i]].id = ids[i];
             }
             map[creators[i]].views = map[creators[i]].views + views[i];
             if(map[creators[i]].max < views[i] || (map[creators[i]].max == views[i] && map[creators[i]].maxid > ids[i])){
                map[creators[i]].max = views[i];
                map[creators[i]].maxid = ids[i];
             }
             max = Math.max(max,map[creators[i]].views);
         }else{
             map[creators[i]] = {};
             map[creators[i]].id = ids[i];
             map[creators[i]].views = views[i];
             map[creators[i]].max = views[i];
             map[creators[i]].maxid = ids[i];
             max = Math.max(max,views[i]);
         }
     }
     const res = [];
     for(let key in map){
         if(map[key].views == max){
             res.push([key,map[key].maxid]);
         }
     }
     return  res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
1月前
|
开发者
社区供稿 | 一张照片跳舞的AnimateAnyone社区开发者复刻版,开源!
日前,兵马俑跳科目三、奶牛猫跳洗澡舞等趣味和魔性的短视频在社交媒体上出圈,背后“一张照片来跳舞”的技术来自阿里通义实验室在可控动画生成领域的一项研究工作——AnimateAnyone。
|
1月前
|
Web App开发 人工智能 开发者
【创意坊】探秘 GitHub 惊艳开源项目!
【创意坊】探秘 GitHub 惊艳开源项目!
64 0
|
1月前
|
人工智能 自然语言处理
AIGC爱好者社区网站——FlowGPT
【2月更文挑战第9天】AIGC爱好者社区网站——FlowGPT
82 4
AIGC爱好者社区网站——FlowGPT
|
机器学习/深度学习 人工智能 自然语言处理
AIGC领航计划系列-快速入门指南-科普篇
“开启人工智能之旅,与AIGC领航计划共创未来”!科普篇:什么是AIGC?AIGC的行业现状?AIGC的应用场景?
656 2
|
开发者
开发者想要的技术社区是哪样?
作为一名技术开发人员,除了在日常开发之余,逛的最多的就是与技术领域相关的技术社区了,随着近几年国内互联网技术圈的飞速发展,各种技术社区如春笋般的诞生,无论是一线大厂对应的技术社区还是专注技术领域的领域技术社区,让国内的开发者在遇到实际开发中产品选型有了更多的选择,这些技术社区也帮助开发者解决日常开发中遇到的各种技术难题,可以说技术社区对开发者而言是非常重要的技术平台载体。
108 1
|
开发者
开发者投身开源项目的能够获得什么?
作为开发者,编程不仅是工作和饭碗,也是兴趣爱好的体现。虽然说有一部分是为了生活才选择了编程开发,但是大部分开发者是因为兴趣和爱好才加入编程队伍中的。不知不觉IT互联网行业已经发展了二十多年,基于开源的软件及应用也是有了快速的发展,越来越多的开发者投入到了开源项目的贡献中来,这让开发者和开源项目建立了很好的连接。
348 1
开发者投身开源项目的能够获得什么?
|
前端开发 小程序 程序员
人人自媒体的时代,程序员该如何利用好自己的优势?我记住了这些神器...
无可否认,随着互联网的不断发展完善,我们现在的生活无时无刻都在与网络打交道。伴随着流量这个名词的冲击,我们对自媒体这一行业也开始了不断的摸索,基本在我的圈子里,做自媒体的太多太多了,有图...
324 0
|
IDE Apache 开发工具
盘点开发者最喜爱的十大开源Xcode插件
Xcode IDE拥有着诸如导航、重构、校准等众多非常高大上的工具,而予以辅助的插件更是在Xcode的基础上对相关功能进行改进与扩展。在应用开发过程中,通过开源包管理器Alcatraz对插件进行安装管理,打造最为强大的开发环境,早已成为开发者们的必备功课。本文总结介绍了备受开发者喜爱的10款开源Xcode插件,涉及代码编辑、注释、管理等各个方面。
734 0
盘点开发者最喜爱的十大开源Xcode插件
|
数据可视化 C语言
玉伯:开源有带给我什么
在2021年527蚂蚁技术日上,蚂蚁内源社区举办了内源专场,在专场上玉伯给大家分享了《开源有带给我什么》,以下为演讲的图文整理。
玉伯:开源有带给我什么
|
Oracle 关系型数据库 数据库
圣诞快乐 | 盘点2017最受欢迎的原创文章
Elon Musk圣诞节信的2017版本。 马斯克在信中称自己是“外星人”,自己与时间的关系跟“地球人”不一样。他在信中分享了他的家人——五个孩子的最新成就:包括 SpaceX(15岁)、Tesla(14岁)、OpenAI和Neuralink(2岁,1岁)、Boring Company(1岁)。
5014 0

热门文章

最新文章