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

相关推荐

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

【LeetCode - 1086】前五科的均分

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

学哥斌的博客 772

Android手机免root玩转Kali NetHunter:Termux保姆级安装指南(附Kex VNC配置)

本文提供了一份详细的Android手机免root安装Kali NetHunter的保姆级指南。通过使用Termux终端模拟器,用户无需解锁Bootloader或获取root权限,即可在普通安卓设备上部署完整的Kali Linux渗透测试环境。教程涵盖了从环境准备、NetHunter核心安装到配置Kex VNC实现图形桌面访问的全过程,并附带了电脑投屏与常见问题解决方案,旨在打造一个便携的移动安全学习与测试平台。

weixin_29208327的博客 295

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

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

FYuu95100的博客 1284

Zynq 双核AMP 通信

4、配置离线编译(这里不讲),配置linux的内核地址空间(0x4000_0000改为0x2000_0000),以及单核启动。CPU1设置为0x2000_0000~0x3FFF_FFFF(也可以小于0x3FFF_FFFF)如果禁用CPU1的L2 cache,在CPU1的bsp里面添加编译时候所需要的宏。3、配置工程,将vivado产生的.xsa文件复制到amp_com项目目录下。9、使用petalinux-package --boot 打包。一、vivado工程。5、编译u-boot。

y183128184的博客 1086

safetymonitorapi

Summary of SA8653 Safety Monitor API Introduction This document details Safety Monitor APIs for the SA8653 QNNX platform, covering dual interfaces of APSS and SAIL. It defines core data structures and enumerations for subsystems, fault severity and health

qq_39257814的博客 1588

栈

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

Rookie的博客 429

嵌入式工程师必学(52):储能系统ESS

能量存储系统(ESS,Energystoragesystems)存在于各种各样的尺寸、形状和技术中。储能系统的技术,即基本的储能机制,自然会影响其重要特性,包括成本、安全性、性能、可靠性和寿命。然而,尽管基础技术很重要,但一个成功的储能项目依赖于对该技术的彻底和深思熟虑的实施,以实现项目的目标。成功的实施取决于储能系统的架构和组装情况。系统的体系结构可以决定其性能和可靠性,与它所使用的技术一致,甚至与之无关。

码农17年的博客 1443

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

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

2301_79058515的博客 1172

滑块逆向及流程分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

pyzzd的博客 8005

深入剖析RK3588系统休眠唤醒机制及驱动适配秘籍

本文深入探讨了RK3588嵌入式系统的休眠唤醒机制及驱动适配技术。首先分析了系统支持的两种休眠模式(Freeze浅度睡眠和Mem深度睡眠)及四种唤醒方式(GPIO中断、蓝牙事件、外设活动和定时器唤醒)的工作原理。重点介绍了驱动适配的三个关键环节:设备树配置要点、驱动代码实现与优化方法,以及驱动与内核电源管理的协同机制。通过GPIO按键唤醒和蓝牙唤醒两个实际案例,展示了具体实现过程并提供了常见问题的解决方案。文章为开发者提供了全面的技术参考,有助于优化系统功耗管理和响应性能,对嵌入式系统开发具有重要指导意义。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

【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

【二 Deepseek+Coze案例】【 2.2 Coze + Deepseek 实现小红书爆款笔记:打造专属Agent智能体】

摘要 本文介绍了如何利用Coze平台和Deepseek模型构建自动化Agent智能体,用于生成和优化小红书爆款笔记。文章首先分析了爆款笔记的核心特征,包括精准定位、吸引标题、实用内容、精美排版和热门标签。随后提出Agent智能体的功能需求,涵盖热点追踪、内容生成与优化、数据分析及自动发布等模块。在技术实现上,详细阐述了从环境配置、数据采集到内容生成与优化的全流程,并提供了Python代码示例,展示如何调用Coze函数获取热点数据及竞品笔记。该方案通过智能化的内容创作与运营策略,帮助用户高效打造高曝光的小红书

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2272

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

leetcode 1086.前五科平均分

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

qq_45789385的博客 846

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

余额充值