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.) 立即下载

相关推荐

招行收款通SM2加密解密全流程解析:PHP开发者必看

本文详细解析了招商银行收款通服务中SM2加密解密的完整流程,特别针对PHP开发者提供了从密钥管理到签名验签的实战指南。涵盖国密算法基础、PHP环境配置、密钥安全存储及生产环境优化方案,帮助开发者快速实现高安全性的支付系统集成。

weixin_30632089的博客 651

【LeetCode - 1086】前五科的均分

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

学哥斌的博客 772

【ROS学习笔记】13.ROS中的坐标管理系统

文章目录1 机器人中的坐标变换2 TF功能包TF坐标变换如何实现?TF的一个小案例3 小程序:小海龟跟随实验打开小程序查看当前的TF树坐标相对位置关系可视化1(tf_echo)坐标相对位置关系可视化2(rviz) 本节学习ROS中的坐标管理系统。 (部分图摘自:b站【古月居】古月·ROS入门21讲) 1 机器人中的坐标变换 机器人运动学的核心,描述任意两个坐标系之中任意两个向量之间的变换,可以用一个4×4的变换矩阵(Transformation Matrices)来描述它的平移和旋转变化。 变换矩阵中有包括

takedachia的博客 4338

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

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

FYuu95100的博客 1284

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

制作 img系统镜像的详细方法

      I.MX6开发板目前支持从TF卡和eMMC启动,启动时,由于各个不同的启动文件对路径有不同的要求,例如uboot文件要求位于启动设备的某个块,dtb文件要求在FAT分区上,文件系统要求在Linux分区上,基于此,我们目前采用将映像制作成img文件的方式,这样可以更简单完成对启动卡的制作。 关于如何制作img,方法如下:方法一  Windows下面利用Win32工具1.   准备我司提供...

armkits的博客 4万+

栈

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

Rookie的博客 429

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3287

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

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

2301_79058515的博客 1172

YOLO系列算法改进 | 自研篇 | C3k2融合SEFN空间增强前馈网络模块 | 去模糊和提升图像细节特征,精度涨点!| WACV 2025

YOLO系列算法改进 | 自研篇 | C3k2融合SEFN空间增强前馈网络模块 | 去模糊和提升图像细节特征,精度涨点!| WACV 2025 (以YOLO26最新目标检测模型为基础,C3k2融合SEFN空间增强前馈网络模块改进Backbone)

2502_91881744的博客 237

YOLO26 vs YOLOv12 vs YOLOv10:工业场景性能实测,速度/精度/部署难度全对比(附完整测试代码)

YOLO26:工业场景全能型选手,无NMS+无DFL设计让部署和推理都省心,小目标精度优势明显,CPU推理速度提升43%,适合大多数生产线场景YOLOv12:中大型目标检测专家,Area Attention在复杂背景下表现出色,适合汽车、家电等大型零部件检测YOLOv10:速度狂魔,GPU上性能领先,轻量化版本适合边缘部署,但小目标精度略逊,适合对实时性要求极高的分拣线场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 623

【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

上海计算机学会2020年5月月赛C++乙组T2经济普查

中国正在以前所未有的力度推进脱贫攻坚,国家计划在2020年使得在现行标准下的贫困人口实现全面脱贫,为此,需要对居民的经济状况进行普查。 题目描述 给定一个正整数n,表示人口数量。一开始,每个居民拥有的财产记为a1​,a2​,⋯,an​,财产可能发生两种变化: 一种来源于个体,由某个居民的经济活动而产生。在某个时刻,某个居民的财产会直接变成某个数值,可能升高也可能降低。 一种来源于政策,在某个时刻,国家会对财产低于某个标准线全部的居民,实施政策支持,使得他们的财产全部正好到达标准线。 给定这些变

长春高老师编程 905

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

leetcode 1086.前五科平均分

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

qq_45789385的博客 846

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值