本文主要是介绍每日一题 2512. 奖励最顶尖的 K 名学生(中等,模拟,排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
- 对于每一个学生的评价,使用 split 方法提取评价中的每一个字符,然后逐个判断是否是正面或者负面词汇来计算分数
- 对id按照要求进行排序。
- 为了加快字符的正负判断速度,先将 positive 和 negative 两个列表转化为 set 这样就可以实现 O(1) 的查询效率。
class Solution:def topStudents(self, positive_feedback: List[str], negative_feedback: List[str], report: List[str], student_id: List[int], k: int) -> List[int]:score = {}positive_feedback = set(positive_feedback)negative_feedback = set(negative_feedback)for re, id in zip(report, student_id):sc = 0for t in re.split():if t in positive_feedback:sc += 3elif t in negative_feedback:sc -= 1score[id] = scstudent_id.sort(reverse=True, key=lambda x:(score[x], -x))return student_id[:k]
这篇关于每日一题 2512. 奖励最顶尖的 K 名学生(中等,模拟,排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!