美文网首页
【算法题】2456. 最流行的视频创作者

【算法题】2456. 最流行的视频创作者

作者: 程序员小2 | 来源:发表于2023-03-28 08:12 被阅读0次

    题目:

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

    相关文章

      网友评论

          本文标题:【算法题】2456. 最流行的视频创作者

          本文链接:https://www.haomeiwen.com/subject/cyutddtx.html