最流行的视频创作者

说在前面

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

题目描述

给你两个字符串数组 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" 。

提示:

  • 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

思路分析

首先我们要先理解一下题目的意思,题目会我们一个数组 两个字符串数组 creators 和 ids ,和一个整数数组 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之实现贪吃蛇小游戏篇

text.c #define _CRT_SECURE_NO_WARNINGS 1 #include "snake.h" void test() {int ch 0;do{Snake snake { 0 };//创建了贪吃蛇//1. 游戏开始 - 初始化游戏GameStart(&snake);//2. 游戏运行 - 游戏的正常运行过程GameRun(&snake);//3. 游戏结束 - 游戏善后…

2023-12-15 Fri

坚持打卡第47天 健康方面&#xff08;非常重要‼️&#xff09; 每天运动&#xff0c;有氧和拉伸为主&#xff0c;运动十几分钟即可✅&#xff08;1h&#xff09;零点之前睡觉早上八点之前起床✅ 学习方面 力扣每日一题✅每天把当天APP上的单词复习完&#xff0c;并复习至少…

java导出word使用模版与自定义联合出击解决复杂表格!

1. 看一下需要导出什么样子的表格 如图所示&#xff0c;这里的所有数据行都是动态的&#xff0c;需要根据查询出来的数据循环展示。 如果只是这样的话&#xff0c;使用freemarker应该都可以搞定&#xff0c;但是他一列中内容相同的单元格&#xff0c;需要合并。 这对于表格样式…

conda命令克隆(复制)环境

前情介绍 最近有个需求是&#xff1a;根据已有的环境生成一个新的环境&#xff0c;也就是所需的新环境有大多数包和已有的环境都是相同的&#xff0c;需要改的只是部分&#xff0c;所以呢&#xff0c;克隆一个就再适合不过了&#xff01; 所需命令 conda create -n B --clone…

java设计模式-工厂方法模式

1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口&#xff0c;将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点&#xff1a; 用户只需要知道具体工厂的名称…

HPM6750系列--第九篇 GPIO详解(基本操作)

一、目的 在之前的博文中我们主要介绍了不同系统不同开发编译调试环境的配置和操作&#xff08;命令行方式、Visual Studio Code、Segger Embedded Studio for RISC-V&#xff09;&#xff0c;以帮助大家准备好学习环境为目的&#xff0c;但是未涉及到芯片本身以及外设的讲解。…

【linux】图形界面Debian的root用户登陆

图形界面Debian默认不允许以root用户登录。这是出于安全考虑&#xff0c;以防止用户使用root权限执行可能损害系统的操作。 如果需要使用root用户&#xff0c;可以通过以下步骤进行登录&#xff1a; 打开终端&#xff0c;使用su命令切换到root用户。修改/etc/gdm3/daemon.con…

大型网站架构演进过程

架构演进 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户&#xff0c;问题就会变得很棘手。大型网站架构主要就是解决这类问题。 架构选型是根据当前业务需要来的&…

SpringMVC 返回 html 视图页面,SpringMVC与Servlet,Servlet重定向与转发

1. SpringMVC与Servlet的关系 SpringMVC框架是建立在Servlet之上的&#xff0c;提供各种功能&#xff0c;各种封装&#xff0c;各种方便的同时&#xff0c;它一点儿也没有限制Servlet&#xff0c;我们完全可以在SpringMVC的controller中&#xff0c;完全按照Servlet的方式来写…

会话技术+请求转发+重定向

会话包括有状态会话和无状态会话。 有状态会话是指在网络通信过程中&#xff0c;服务器需要记住客户端的状态信息&#xff0c;以便后续的通信能够继续使用这些信息。 无状态会话是无法持续保存信息&#xff0c;http超文本传输协议中的http属于无状态会话 如何保存会话&#xff…

时序预测 | Python实现XGBoost电力需求预测

时序预测 | Python实现XGBoost电力需求预测 目录 时序预测 | Python实现XGBoost电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较…

第二十五章 STL- 常用算法

概述: 算法主要是由头文件<algorithm> <functional> <numeric>组成。 <algorithm>是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 <numeric>体积很小&#xff0c;只包括几个在序列上面进行简…

JS中的String常用的实例方法

splice():分隔符 把字符串以分隔符的形式拆分为数组 const str pink,red;const arr str.split(,);console.log(arr);//Array[0,"pink";1:"red"]const str1 2022-4-8;const arr1 str1.split(-);console.log(arr1);//Array[0,"2022";1:"…

Vue3快速上手笔记

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…

实操Nginx(七层代理)+Tomcat多实例部署,实现负载均衡和动静分离

目录 Tomcat多实例部署&#xff08;192.168.17.27&#xff09; 1.安装jdk&#xff0c;设置jdk的环境变量 2.安装tomcat在一台已经部署了tomcat的机器上复制tomcat的配置文件取名tomcat1 ​编辑 编辑配置文件更改端口号&#xff0c;将端口号改为8081 启动 tomcat&#xff…

SpringBoot之响应的详细解析

2. 响应 前面我们学习过HTTL协议的交互方式&#xff1a;请求响应模式&#xff08;有请求就有响应&#xff09; 那么Controller程序呢&#xff0c;除了接收请求外&#xff0c;还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中&#xff0c;都已经设置了…

Linux面试题精选:提升你的面试准备

大家有关于JavaScript知识点不知道可以去 &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&#xff1a;ajax知识点 &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 学习…

CD8+T细胞通过NKG2D-NKG2DL轴维持对MHC-I阴性肿瘤细胞的杀伤

今天给同学们分享一篇实验文章“CD8 T cells maintain killing of MHC-I-negative tumor cells through the NKG2D-NKG2DL axis”&#xff0c;这篇文章发表在Nat Cancer期刊上&#xff0c;影响因子为22.7。 结果解读&#xff1a; MHC-I阴性肿瘤的免疫疗法需要CD8 T细胞 作者先…

下午好~ 我的论文【yolo1~4】(第二期)

写在前面&#xff1a;本来是一期的&#xff0c;我看了太多内容了&#xff0c;于是分成三期发吧 TAT &#xff08;捂脸&#xff09; 文章目录 YOLO系列v1v2v3v4 YOLO系列 v1 You Only Look Once: Unified, Real-Time Object Detection 2015 ieee computer society 12.3 CCF-C…