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


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

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

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

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

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

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

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

    代码:

    1. class Solution {
    2. public:
    3. vector<int> topStudents(vector& positive_feedback, vector& negative_feedback, vector& report, vector<int>& student_id, int k) {
    4. //将正面和负面的单词转为set方便后续查找
    5. unordered_setgood(positive_feedback.begin(),positive_feedback.end());
    6. unordered_setbad(negative_feedback.begin(),negative_feedback.end());
    7. //map用来统计学生的分数
    8. unordered_map<int,int>m;
    9. vector<int>res;
    10. int n=report.size();
    11. for(int i=0;i
    12. m[student_id[i]]=0;
    13. string temp="";
    14. //提取评语中的每个单词
    15. for(char& c:report[i]){
    16. if(c!=' ') temp+=c;
    17. else{
    18. //提取出单词之后和好词坏词比较,对应地加分减分
    19. if(good.count(temp)) m[student_id[i]]+=3;
    20. else if(bad.count(temp)) m[student_id[i]]--;
    21. temp="";
    22. }
    23. }
    24. if(good.count(temp)) m[student_id[i]]+=3;
    25. else if(bad.count(temp)) m[student_id[i]]--;
    26. }
    27. vectorint>>cache;
    28. //提取出每个学生的id以及分数
    29. for(auto& a:m){
    30. cache.push_back({a.first,a.second});
    31. }
    32. //按照题目要求排序
    33. sort(cache.begin(),cache.end(),[](auto& a,auto& b){
    34. if(a[1]!=b[1]) return a[1]>b[1];
    35. return a[0]0];
    36. });
    37. //再将学生id取出
    38. for(auto& c:cache){
    39. //最多取出k名
    40. if(res.size()>=k) break;
    41. res.push_back(c[0]);
    42. }
    43. return res;
    44. }
    45. };

  • 相关阅读:
    JVM运行流程
    lua-arm平台交叉编译
    [题]跳房子 #单调队列优化(伪)
    centOS7安装rabbitMQ
    Linux上git的基本操作
    「C++程序设计 (面向对象进阶)」学习笔记・二
    【无标题】QCC 308x 518x 517x增加usb voice 32k采样率
    leetcode做题笔记140. 单词拆分 II
    JavaSE基础语法思维导图
    0基础学习PyFlink——用户自定义函数之UDAF
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/133760414