【每日一题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

目录
相关文章
|
7月前
|
存储
【每日一题Day113】LC1797设计一个验证系统 | 哈希表
【每日一题Day113】LC1797设计一个验证系统 | 哈希表
43 0
|
7月前
|
存储 人工智能 BI
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
54 0
|
7月前
|
存储
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
54 0
|
7月前
|
机器学习/深度学习
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
40 0
|
7月前
|
算法
【每日一题Day229】LC2352相等行列对 | 哈希
【每日一题Day229】LC2352相等行列对 | 哈希
45 0
|
7月前
每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)
每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)
32 0
|
7月前
【每日一题Day304】LC1267统计参与通信的服务器 | 哈希表
【每日一题Day304】LC1267统计参与通信的服务器 | 哈希表
40 0
|
7月前
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
37 0
|
7月前
【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表
【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表
46 0
|
7月前
|
存储
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
36 0