【力扣每日一题】2023.10.11 奖励最顶尖的k名学生

目录

题目:

示例:

分析:

代码:


题目:

【力扣每日一题】2023.10.11 奖励最顶尖的k名学生_第1张图片

示例:

【力扣每日一题】2023.10.11 奖励最顶尖的k名学生_第2张图片

分析:

题目给我们两个字符串数组,分别表示正面评价的单词和负面评价的单词。再给我们n个学生的评语,评语中有一个正面单词我们就加3分,有一个负面单词我们就减一分。最终要我们返回分数最高的前k个学生的id,如果分数一致则优先选取id小的学生。

大体思路就是我们直接模拟就好了,把每个评语的单词提取出,然后去寻找这个单词是否属于正面评价或是负面评价,对应的加分减分,最终按照题目要求排序即可。

我们需要快速的知道某个单词是否在正面单词或是负面单词中,那么我们就可以先把两个存放单词是数组转为set来方便我们查找。

提取出评价中的单词也好办,只需要将整个字符串按照空格来分割就好。

分数统计完毕之后再按照题目要求排序,取出前k个学生即可。

下面的代码看着多,其实核心思路就是我上面这一小段,代码显得臃肿主要是我代码水平不到位,这道题其实是不难的。

代码:

class Solution {
public:
    vector topStudents(vector& positive_feedback, vector& negative_feedback, vector& report, vector& student_id, int k) {
        //将正面和负面的单词转为set方便后续查找
        unordered_setgood(positive_feedback.begin(),positive_feedback.end());
        unordered_setbad(negative_feedback.begin(),negative_feedback.end());
        //map用来统计学生的分数
        unordered_mapm;
        vectorres;
        int n=report.size();
        for(int i=0;i>cache;
        //提取出每个学生的id以及分数
        for(auto& a:m){
            cache.push_back({a.first,a.second});
        }
        //按照题目要求排序
        sort(cache.begin(),cache.end(),[](auto& a,auto& b){
            if(a[1]!=b[1]) return a[1]>b[1];
            return a[0]=k) break;
            res.push_back(c[0]);
        }
        return res;
    }
};

你可能感兴趣的:(力扣每日一题,leetcode,算法,数据结构,c++)