Leetcode 1086. High Five Java 解法

javalruleetcode-coder-Leetcode:coder-Leetcode java lru leetcode 如果你喜欢这个项目,请给我一个star。 ★ 算法 # 标题 解决方案 时间 空间 视频 困难 标签 1282 中等的 1281 简单的 1277 中等的 1271 简单的 1267 中等的 1266 简单的 1260 简单的 1252 O(m*n + k) O(m*n) 简单的 1237 简单的 1243 简单的 1232 简单的 1228 简单的 1217 简单的 1213 简单的 1207 上) O(1) 简单的 1200 简单的 1198 简单的 1196 简单的 1189 简单的 1185 简单的 1184 简单的 1165 简单的 1160 上) 欧(米) 简单的 1154 O(1) O(1) 简单的 1150 简单的 1137 上) 上) 简单的 1134 简单的 1133 简单的 1128 简单的 1122 上) 上) 简单的 1170 简单的 1119 简单的 1108 简单的 1099 简单的 1089 O(n^2) O(1) 简单的 1086 简单的 1085 简单的 1079 O(1) O(1) 中等的 1078 上) O(1 立即下载

先吐槽一下这个难度,咋也不能是easy啊,和其他easy的不在一个量级。

Given a list of scores of different students, return the average score of each student's top five scores in the order of each student's id.

Each entry items[i] has items[i][0] the student's id, and items[i][1] the student's score.  The average score is calculated using integer division.

 

Example 1:

Input: [[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]]
Output: [[1,87],[2,88]]
Explanation: 
The average of the student with id = 1 is 87.
The average of the student with id = 2 is 88.6. But with integer division their average converts to 88.

 

Note:

  1. 1 <= items.length <= 1000
  2. items[i].length == 2
  3. The IDs of the students is between 1 to 1000
  4. The score of the students is between 1 to 100
  5. For each student, there are at least 5 scores

Approach #1 Brute Force, sorting

这是我的解法,还有一些莫名其妙的test case没有通过。

class Solution {
    public int[][] highFive(int[][] items) {
        int rows = items.length;
        Set<Integer> set = new HashSet();

        // first sort all items by grades
        for(int i=0; i<rows; i++){
            int min = i;
            set.add(items[i][0]);

            for(int j=i+1; j<rows;j++){
                if(items[j][1]<items[min][1]){
                    min = j;
                }
            }
            if(min!=i){
                int[] temp = items[i];
                items[i] = items[min];
                items[min] = temp;
            }
        }
        
        // now start construct the answer array
        Object[] obj = set.toArray(); 
		int id[] = new int[obj.length];
        int[][] ans = new int[obj.length][2];
        
		for (int i = 0; i <obj.length; i++) {
			id[i] = (int) obj[i];
            ans[i][0] = id[i];
        }
        
        // now focus on calculating the average score
        for (int i=0; i<obj.length; i++){
            int count = 0;
            int sum = 0;
            int j = rows-1;
            while(count<5){       
                if(items[j][0] == ans[i][0]){
                    sum += items[j][1];
                    count += 1;
                    j-=1;
                }
               
                else {j-=1; continue;}
            }
            ans[i][1] = sum/5;
        }
        return ans;
    }
}

结果:

莫名其妙少了一个学生的成绩。

Wrong Answer

Input

[[1,46],[1,44],[1,92],[1,26],[1,90],[2,7],[2,76],[2,20],[2,46],[2,68],[3,8],[3,55],[3,66],[3,55],[3,62],[4,22],[4,90],[4,92],[4,13],[4,89],[5,13],[5,20],[5,82],[5,83],[5,25],[6,83],[6,89],[6,33],[6,16],[6,70],[7,85],[7,15],[7,33],[7,72],[7,9]]

Output

[[1,59],[2,43],[3,49],[4,61],[5,44],[6,58]]

Expected

[[1,59],[2,43],[3,49],[4,61],[5,44],[6,58],[7,42]]

分析

我的思路是,先把所有的行按照学生成绩这一列来排序,然后用set储存所有学生的id来避免重复,再用set构造最终解的第一列,然后从排好序的成绩列表里,按照id,每次选最高的5个算出均分。

 

Approach #2 HashMap, PriorityQueue

摸一下大神的解法。


class Solution {
    public int[][] highFive(int[][] items) {
    
        HashMap<Integer, PriorityQueue<Integer>> map = new HashMap<>();
        
       for(int[] item : items){
           int id = item[0];
           int score = item[1];
           
           if(!map.containsKey(id)){
               PriorityQueue<Integer> pq = new PriorityQueue<Integer>(5);
               pq.offer(score);
               map.put(id, pq);
           }else{
               PriorityQueue<Integer> pq = map.get(id);
               pq.offer(score);
               if(pq.size() > 5){
                   pq.poll();
               }
               map.put(id, pq);
           }
       }
        
        int index = 0;
        
        int[][] res = new int[map.size()][2];
        
       for(int id : map.keySet()){
           
           res[index][0] = id;
        
           PriorityQueue<Integer> pq = map.get(id);
           int sum = 0;
           int size = pq.size();
           
           while(!pq.isEmpty()){
               sum+= pq.poll();
           }
         
           res[index][1] = sum/size;
           
           index++;
           
       }
        
      
        return res;
       
    }
}

分析

本题使用PriorityQueue是十分自然的:

1>PriorityQueue是一种无界的,线程不安全的队列
2>PriorityQueue是一种通过数组实现的,并拥有优先级的队列
3>PriorityQueue存储的元素要求必须是可比较的对象, 如果不是就必须明确指定比较器

参考下面这篇文章:

https://www.jianshu.com/p/f1fd9b82cb72

LeetCode 参考 Java版本 LeetCode 400题目 Java版本 (LeetCode is the platform to help you enhance your skills, expand your knowledge and prepare for technical interviews.) 立即下载

相关推荐

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 574

【LeetCode - 1086】前五科的均分

【简单】排序、数组、哈希表

学哥斌的博客 772

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战中文教程,旨在帮助用户从零开始掌握这一先进的仿真框架。内容涵盖从环境安装、运行第一个“Hello World”仿真,到深入理解实体、组件、想定编辑器等核心概念,并进阶探讨动力学建模、传感器仿真与红蓝对抗想定构建。最后,指南还提供了效能分析与实战排错技巧,帮助用户将仿真结果转化为有价值的量化数据,适用于军事、航空航天等领域的复杂系统行为模拟研究。

weixin_29294395的博客 355

leetcode 算法题1086 (简单286) 前五科的均分

leetcode 算法题1086 (简单286) 前五科的均分 题目介绍 给你一个不同学生的分数列表, 请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分。 对于每条 items[i] 记录, items[i][0] 为学生的 id,items[i][1] 为学生的分数。 平均分...

FYuu95100的博客 1284

YOLOv改进 | YOLOv11更换主干Backbone之MobileNetV2(轻量化主干网络结构--高效轻量移动模型)

本文提出将YOLOv11的主干网络替换为轻量化的MobileNetV2,以提升模型在移动端设备的部署效率。MobileNetV2通过倒残差结构和线性瓶颈层,显著减少了计算量和参数量(降至1M~3M),同时保持多尺度特征提取能力。实验表明,改进后的模型在移动设备上可实现20-30 FPS的实时检测,适用于手机APP、无人机和工业监控等场景。核心代码展示了倒残差块的实现,通过深度可分离卷积和通道扩展/压缩实现高效特征提取。

走向CTO的路上... 1460

使用openclaw出现blocked URL fetch (url-fetch) reason=Blocked: resolves to private/internal/special 解决方案

本文主要介绍了使用openclaw出现blocked URL fetch (url-fetch) target=https://news.google.com/search reason=Blocked: resolves to private/internal/special-use IP address 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

栈

题目描述 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。 栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直

Rookie的博客 429

【25届数字IC秋招总结】面试经验10——紫光同芯

25届数字ic面试记录——紫光同芯

lalala0635的博客 862

LeetCode - Easy - 108,看完这篇文终于搞明白了

面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

2301_79058515的博客 1172

RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程

U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:

内核笔记 1233

LabVIEW实现TCP通信

在本节中,我们将简要探讨TCP通信的基础知识,并以工业物联网平台TLINK中的云端设备数据发布设计为例,详细阐述在互联网环境下TCP客户端应用程序设计的基本方法。

不脱发的程序猿 1959

【Leetcode】1086. High Five

题目地址: https://leetcode.com/problems/high-five/ 给定一个二维数组,每一行代表某个学生的某一科目分数,第一个数字是学生id,第二个数字是分数。要求返回一个数组,存储每个学生最高的555门课的平均分(返回整型即可),并且数组要按学生id排序。 思路是哈希表 + 堆。哈希表key存id,value存一个堆,堆里存id对应的学生的最高无门课的分数。代码如下: import java.util.Map; import java.util.PriorityQueue; im

数学、算法爱好者的博客 434

13、深入理解 Microsoft 365 的安全与合规概念

本文深入探讨了 Microsoft 365 的安全与合规概念,涵盖文档存储、文件共享、审计、保留、eDiscovery、分类和保护以及网络等多个关键方面。通过合理配置这些功能,组织可以更好地管理和保护其数据资源,满足法规要求,并提升工作效率。文章还提供了最佳实践建议及流程图,帮助读者全面理解 Microsoft 365 的安全架构和管理策略。

k8s6orchestrator的博客 211

leetcode 1086. 前五科的均分(C++)

给你一个不同学生的分数列表,请按学生的 id顺序返回每个学生最高的五科成绩的平均分。 对于每条items[i]记录,items[i][0]为学生的 id,items[i][1]为学生的分数。平均分请采用整数除法计算。 示例: 输入:[[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[...

qq_27060423的博客 4767

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

leetcode 1086.前五科平均分

题目:给你一个不同学生的分数列表,请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分。 对于每条 items[i] 记录, items[i][0] 为学生的 id,items[i][1] 为学生的分数。平均分请采用整数除法计算。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/high-five 著作权归领扣网络所有。商业转载...

qq_45789385的博客 846

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode-Python-1086. 前五科的均分

给你一个不同学生的分数列表,请按学生的 id顺序返回每个学生最高的五科成绩的平均分。 对于每条items[i]记录,items[i][0]为学生的 id,items[i][1]为学生的分数。平均分请采用整数除法计算。 示例: 输入:[[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[...

Keep Coding 2205

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

leetcode——1086.前五科的均分

思路 按照题目要求对同一个学生科目成绩进行降序排序 对不同学生学号进行升序排序 根据学号的不同,对成绩数组进行遍历 代码 class Solution { public: static bool cmp(vector<int>& a, vector<int>& b) { if (a[0] == b[0]) return a[1] > b[1];//取高分科目 else

Dedication_的博客 294

leetcode java_LeetCode 160. Java版代码(附详细解释)

题目描述给定两个链表,请找它们的交汇点。如果两个链表不相交,则返回 null;在函数结束时,两个链表必须保持原来的结构;链表中不存在环;你的代码需要的时间复杂度是 O(n),额外的空间复杂度是 O(1);样例给定如下两个链表:A: a1 → a2↘c1 → c2 → c3↗B: b1 → b2 → b3则交汇点是 c1。Java 代码长文预警!代码不多,但是后面附有详细的...

weixin_36102930的博客 149

LeetCode#1086. High Five

1086. High Five Example 1: Input: items = [[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]] Output: [[1,87],[2,88]] Explanation: The student with ID = 1 got scores 91, 92, 60, 65, 87, and 100. Their top five average is (100

AlfredaYu的博客 377

算法权力如何重塑内容生态:从推荐系统到数字说服的深度解析

推荐系统作为现代信息分发的核心技术,其核心原理是通过机器学习模型对用户行为数据进行分析,构建动态的用户画像,并基于多目标优化(如点击率、完播率、用户留存等)进行内容排序。这项技术的价值在于能够高效匹配用户与内容,提升信息获取效率,但也带来了信息茧房、内容同质化等挑战。在工程实践中,算法通过反馈循环不断自我进化,形成了强大的马太效应,决定了内容的可见性与传播范围。当前,推荐系统已广泛应用于社交媒体、电商平台、新闻资讯等领域,深刻影响着内容生态的构建。本文聚焦于算法权力这一概念,探讨其如何作为数字说服战场上的隐

weixin_30599769的博客 546

codevs 1086

#include using namespace std; long long Catalan(int m) { if (m==1)    return 1; return (Catalan(m-1)*(4*m-2)/(m+1)); } int main() { int n; scanf("%d",&n); cout } //卡特兰数

Michael920235063的博客 383

LeetCode精选算法200题------(3)1086. 前五科的均分

写的时候遇到了许多问题。记录一下map的注意点:(1)emplace比insert更快(2)map自动按照key排序,unordered——map 哈希表无序(map本质是红黑树)(3)遍历map可以用auto[a1,a2],好像也可以直接first,second但是leetcode好像不行。可以用map

weixin_41593360的博客 570

重复字符串匹配

给定两个字符串A和B,找到A必须重复的最小次数,以使得B是它的子字符串。 如果没有这样的解决方案,返回-1。 样例 样例1: 输入 : A = "a" B = "b". 输出 : -1 样例 2: 输入 : A = "abcd" B = "cdabcdab". 输出 :3 解释:因为将A重复3次以后 (“abcdabcdabcd”), B将成为其的一个子串 ; 而如...

weixin_41791402的博客 375

Leetcode-1086 high five(前五科的均分)

1 #define _for(i,a,b) for(int i = (a);i < b;i ++) 2 struct cmp 3 { 4 bool operator() (int a,int b) 5 { 6 return a>b; 7 } 8 }; 9 class Solution 10 { 11 ...

weixin_30278237的博客 470

leetcode1086

1 class Solution: 2 def highFive(self, items: List[List[int]]) -> List[List[int]]: 3 n = len(items) 4 dic = {} 5 for item in items: 6 ids = item...

weixin_33819479的博客 321

leetcode-1086. 前五科的均分-C语言

/** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume ...

SFFS 1340
上一篇: 一瞥 Java Arrays
下一篇: Leetcode 1085. Sum of Digits in the Minimum Number, Java解法
YuanTheCoder
博客等级 码龄9年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值