• 奖励最顶尖的k位学生------题解


    题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

    题解:使用Set集合存储正面和负面反馈,加快查找速率。首先先分割字符串,然后查找是否包含对应的正负面反馈,然后算出得分,最后对map集合排序,找出前k名顶尖学生

    代码:

    改进之前:

    1. public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {
    2. List<Integer> list = new ArrayList<>();
    3. HashMap<Integer,Integer> map= new HashMap<>();
    4. for(int i=0;i<student_id.length;i++)
    5. {
    6. int sum=0;
    7. String res[]=report[i].split(" |\\.");
    8. for(int j=0;j<res.length;j++)
    9. {
    10. for(int p=0;p< Math.max(positive_feedback.length,negative_feedback.length);p++)
    11. {
    12. if(p<positive_feedback.length&&res[j].equals(positive_feedback[p]))
    13. {
    14. sum=sum+3;
    15. }
    16. if(p<negative_feedback.length&&res[j].equals(negative_feedback[p]))
    17. {
    18. sum=sum-1;
    19. }
    20. }
    21. }
    22. map.put(student_id[i],sum);
    23. }
    24. List<Map.Entry<Integer, Integer>> sortedList = map.entrySet().stream()
    25. .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed()
    26. .thenComparing(Map.Entry.comparingByKey()))
    27. .collect(Collectors.toList());
    28. // 输出排序后的结果
    29. for (Map.Entry<Integer, Integer> entry : sortedList) {
    30. // System.out.println(entry.getKey() + ": " + entry.getValue());
    31. list.add(entry.getKey());
    32. k--;
    33. if(k==0)
    34. break;
    35. }
    36. return list;
    37. }

    改进之后:

    1. public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {
    2. List<Integer> list = new ArrayList<>();
    3. Set<String> positiveSet = new HashSet<>(Arrays.asList(positive_feedback));
    4. Set<String> negativeSet = new HashSet<>(Arrays.asList(negative_feedback));
    5. HashMap<Integer, Integer> map = new HashMap<>();
    6. for (int i = 0; i < student_id.length; i++) {
    7. int sum = 0;
    8. String[] res = report[i].split(" |\\.");
    9. for (String word : res) {
    10. if (positiveSet.contains(word)) {
    11. sum += 3;
    12. }
    13. if (negativeSet.contains(word)) {
    14. sum -= 1;
    15. }
    16. }
    17. map.put(student_id[i], sum);
    18. }
    19. // 以下部分保持不变
    20. List<Map.Entry<Integer, Integer>> sortedList = map.entrySet().stream()
    21. .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed()
    22. .thenComparing(Map.Entry.comparingByKey()))
    23. .collect(Collectors.toList());
    24. for (Map.Entry<Integer, Integer> entry : sortedList) {
    25. list.add(entry.getKey());
    26. k--;
    27. if (k == 0)
    28. break;
    29. }
    30. return list;
    31. }

  • 相关阅读:
    蓝牙资讯|苹果 AirPods Pro 2正式发布,有惊喜也有遗憾
    为啥这么人选择iPhone
    什么是ProxySQL?
    qt设置tableView中文字颜色(使用自定义model)
    网页制作基础大二dw作业HTML+CSS+JavaScript云南我的家乡旅游景点
    kubernetes-v1.23.3 部署 MySQL-5.7.31
    UE5 C++ Widget练习 Button 和 ProgressBar创建血条
    java计算机毕业设计医院人事档案管理系源代码+系统+数据库+lw文档
    MEI 论文笔记
    论文解读(IGSD)《Iterative Graph Self-Distillation》
  • 原文地址:https://blog.csdn.net/MogulNemenis/article/details/133774151