题目:
给你两个字符串数组 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 <= 10^5
1 <= creators[i].length, ids[i].length <= 5
creators[i] 和 ids[i] 仅由小写英文字母组成
0 <= views[i] <= 10^5
java代码:
class Solution {
//字典序最小的 id,ids里面不是排序的,不能直接遍历取 要遍历再判断。
public List<List<String>> mostPopularCreator(String[] creators, String[] ids, int[] views) {
int n = creators.length;
//把创作者 和 该创作者的总播放量 当作 K和V 放进HashMap,顺便求个 最大的总播放量
HashMap<String, Double> nameSumMap = new HashMap<>();
HashMap<String, Integer> nameMaxViewMap = new HashMap<>();
HashMap<String, String> nameIdMap = new HashMap<>();
double maxValue = 0;
for (int i = 0; i < n; i++) {
nameSumMap.put(creators[i], nameSumMap.getOrDefault(creators[i],0.0) + views[i]);
maxValue = Math.max(maxValue, nameSumMap.get(creators[i]));
//当nameMaxViewMap为空时 或 遍历到更大的播放量的视频时 或 (遍历到播放量都是最大值的视频 且 该视频的id字典序更小时)
// 把nameMaxViewMap、nameIdMap里该创作者的单个视频的最大播放量和对应的id 更新了
// nameIdMap.get(creators[i]).compareTo(ids[i]) > 0 是 前一个的字典序 大于 后一个
if (nameMaxViewMap.get(creators[i]) == null
|| views[i] > nameMaxViewMap.get(creators[i])
|| (views[i] == nameMaxViewMap.get(creators[i]) && nameIdMap.get(creators[i]).compareTo(ids[i]) > 0)){
nameMaxViewMap.put(creators[i], views[i]);
nameIdMap.put(creators[i], ids[i]);
}
}
//根据 最大的总播放量 求出该播放量的创作者们。
List<List<String>> list = new ArrayList<>();
for (String i : nameSumMap.keySet()){
if (nameSumMap.get(i).equals(maxValue)){
List<String> theOne = new ArrayList<>();
theOne.add(i);
theOne.add(nameIdMap.get(i));
list.add(theOne);
}
}
return list;
}
}
网友评论