【每日一题Day344】LC2512奖励最顶尖的 K 名学生 | 哈希表+排序

简介: 【每日一题Day344】LC2512奖励最顶尖的 K 名学生 | 哈希表+排序

奖励最顶尖的 K 名学生【LC2512】

给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。

一开始,每位学生分数为 0 。每个正面的单词会给学生的分数 加 3 分,每个负面的词会给学生的分数 减 1 分。

给你 n 个学生的评语,用一个下标从 0 开始的字符串数组 report 和一个下标从 0 开始的整数数组 student_id 表示,其中 student_id[i] 表示这名学生的 ID ,这名学生的评语是 report[i] 。每名学生的 ID 互不相同。

给你一个整数 k ,请你返回按照得分 从高到低 最顶尖的 k 名学生。如果有多名学生分数相同,ID 越小排名越前。

思路

使用两个哈希表分别存储正面单词以及负面单词

然后遍历每个学生的评语,逐个判断是否是正面单词或者负面单词,求出每个学生的分数

对分数进行升序排序,分数相等时,ID 越小排名越前

最后取前k个学生的ID

实现

class Solution {
    public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {
        Set<String> pos = new HashSet<>();
        Set<String> neg = new HashSet<>();
        int n = report.length;
        int[][] score = new int[n][2];
        for (String s : positive_feedback){
            pos.add(s);
        }
        for (String s : negative_feedback){
            neg.add(s);
        }
        for(int i = 0; i < n; i++){
            String[] ss = report[i].split(" ");
            score[i][1] = student_id[i];// id
            for (String s : ss){
                if (pos.contains(s)){
                    score[i][0] += 3;
                }else if (neg.contains(s)){
                    score[i][0] -= 1;
                }
            }
        }
        Arrays.sort(score, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < k; i++){
            res.add(score[i][1]);
        }
        return res;
    }
}

image.png

目录
相关文章
|
SQL Oracle 关系型数据库
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
218 1
|
存储 Java 中间件
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
1200 101
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
12月前
|
Java 网络架构 Spring
springboot中restful风格请求的使用
本文介绍了在Spring Boot中如何使用RESTful风格的请求,包括创建HTML表单页面、在application.yaml配置文件中开启REST表单支持、编写Controller层及对应映射处理,并进行服务启动和访问测试。HTML表单默认只支持GET和POST请求,因此对于DELETE和PUT请求,需要使用隐藏域`_method`来支持。
springboot中restful风格请求的使用
|
9月前
|
存储 人工智能 缓存
【AI系统】Ascend C 语法扩展
Ascend C 是基于标准 C++ 扩展的编程语言,专为华为昇腾处理器设计。本文介绍了 Ascend C 的基础语法扩展、API(基础与高阶)、关键编程对象(数据存储、任务间通信与同步、资源管理及临时变量),以及如何利用这些特性高效开发。通过华为自研的毕昇编译器,Ascend C 实现了主机与设备侧的独立执行能力,支持不同地址空间的访问。API 包括计算、数据搬运、内存管理和任务同步等功能,旨在帮助开发者构建高性能的 AI 应用。
268 2
【AI系统】Ascend C 语法扩展
|
10月前
|
机器学习/深度学习 人工智能 监控
探索 AI 在软件开发中的新角色:代码审查与质量保证
【10月更文挑战第22天】本文探讨了AI在软件开发中的新角色,特别是在代码审查和质量保证方面。AI通过静态代码分析、代码风格一致性检查和历史数据学习,提高代码审查的效率和准确性。在质量保证中,AI还能够自动生成测试用例、监控应用性能并持续优化。文章还讨论了AI在软件开发中的实践应用、挑战与机遇,以及实施的最佳实践。
|
数据可视化 前端开发 JavaScript
【Echarts大屏】数据中心可视化大屏(附原码一键复制)
【Echarts大屏】数据中心可视化大屏(附原码一键复制)
|
JSON 数据格式
非常实用的5种json数组去重方法,函数实现思路竟是chatgpt帮我写的!
你敢信这5种json数组去重方法的实现思路竟然是chatgpt写的,chatgpt对函数的理解也太准确了吧!
480 0
|
缓存 数据库 开发者
Django视图中的缓存机制:提升页面加载速度
【4月更文挑战第15天】本文介绍了Django的缓存机制在提升页面加载速度中的作用。Django提供视图缓存和片段缓存,通过`cache_page`装饰器和`CacheMixin`实现视图级别的缓存,使用`{% cache %}`模板标签实现页面片段缓存。开发者可选择不同的缓存后端,并在设置中配置缓存参数。同时,注意合理控制缓存粒度、及时更新和管理缓存,以优化用户体验和网站性能。
|
前端开发
HTML+CSS实现小米登录界面
HTML+CSS实现小米登录界面
|
数据采集 存储 Java
终于看明白布隆过滤器了
布隆过滤器不会出现第一种失误,只可能会有第二种类型的失误。但是布隆过滤器可以通过人为的设计,让第二种类型失误的触发率很低,低到万分之一。
406 0
终于看明白布隆过滤器了