2512. 奖励最顶尖的 K 名学生
class Solution:
def topStudents(self, positive_feedback: List[str], negative_feedback: List[str], report: List[str], student_id: List[int], k: int) -> List[int]:
words = {}
for w in positive_feedback:
words[w] = 3
for w in negative_feedback:
words[w] = -1
arr = []
for i, r in zip(student_id, report):
score = sum(words.get(w, 0) for w in r.split())
arr.append([-score, i])
arr.sort()
return [v[1] for v in arr[:k]]

class Solution {
public:
vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feedback, vector<string>& report, vector<int>& student_id, int k) {
unordered_map<string, int> words;
for (auto word : positive_feedback){
words[word] = 3;
}
for (auto word : negative_feedback){
words[word] = -1;
}
vector<vector<int>> arr;
for (int i = 0; i < report.size(); ++i){
stringstream ss;
string w;
int score = 0;
ss << report[i];
while (ss >> w){
if (words.count(w)){
score += words[w];
}
}
arr.push_back({-score, student_id[i]});
}
sort(arr.begin(), arr.end());
vector<int> top_k;
for (int i = 0; i < k; ++i){
top_k.emplace_back(arr[i][1]);
}
return top_k;
}
};