.Réalisation technique
# class Solution:
# def minimumTimeRequired(self, jobs: List[int], k: int) -> int:
# self.record_dict = collections.defaultdict(list)
# self.count = 0
class SkiRankingSystem:
def __init__(self):
self.record_dict = collections.defaultdict(list)
self.count = 0
# addRecord(int userId, int duration)
# Ajouter un record de ski,Le mêmeuserIdPlusieurs enregistrements de ski peuvent être ajoutés
def add_record(self, user_id: int, duration: int) -> None:
self.count += 1
self.record_dict[user_id].append((duration, self.count))
self.record_dict[user_id].sort()
# int[] getTopAthletes(int num)
# Retour à l'avant du ski le plus rapide numAthlètes,Retourner avec un tableau, En fonction du temps de ski, de bas en haut , Si l'heure est la même, elle est retournée dans l'ordre dans lequel elle a été enregistrée
def get_top_athletes(self, num: int) -> List[int]:
athletes = sorted(self.record_dict.items(), key=lambda item: (item[1][0][0], item[1][0][1]))
# item[1]Oui.value,Parce queitem[0]- Oui.key
# item[1][0] Est de prendre le plus petit de chaque athlète duration, Parce que le plus petit duration La première rangée.
# item[1][0][0] C'est la durée minimale enregistrée duration,item[1][0][1] Est l'ordre d'enregistrement des enregistrements de durée minimale , Dans le titre correspondant “ Si l'heure est la même, elle est retournée dans l'ordre dans lequel elle a été enregistrée ”Exigences
result = []
for i in athletes[:num]:
result.append(i[0])
print("get_top_athletes:", result)
print("athletes:",athletes)
return result
# int[] queryTop3Record(int userId)
# Retour à un athlète qui glisse le plus vite 3Enregistrements secondaires,( Notez que les données ici peuvent être répétées , Le même athlète peut skier plusieurs fois pendant la même période , Si la même chose doit être retournée )
def query_top3_record(self, user_id: int) -> List[int]:
record = self.record_dict[user_id][:3]
print("query_top3_record:", record)
return [i[0] for i in record]
# Cas d'utilisation
add_record(self, 1, 5)
add_record(self, 1, 33)
add_record(self, 1, 22)
add_record(self, 1, 44)
add_record(self, 2, 8)
add_record(self, 3, 44)
add_record(self, 4, 11)
add_record(self, 4, 5)
print("list1:", self.record_dict)
get_top_athletes(self, 4)
add_record(self, 3, 8)
query_top3_record(self, 1)
print("list2:", self.record_dict)
# stdout
# list1: defaultdict(<class 'list'>, {1: [(5, 1), (22, 3), (33, 2), (44, 4)], 2: [(8, 5)], 3: [(44, 6)], 4: [(5, 8), (11, 7)]})
# get_top_athletes: [1, 4, 2, 3]
# athletes: [(1, [(5, 1), (22, 3), (33, 2), (44, 4)]), (4, [(5, 8), (11, 7)]), (2, [(8, 5)]), (3, [(44, 6)])]
# query_top3_record: [(5, 1), (22, 3), (33, 2)]
# list2: defaultdict(<class 'list'>, {1: [(5, 1), (22, 3), (33, 2), (44, 4)], 2: [(8, 5)], 3: [(8, 9), (44, 6)], 4: [(5, 8), (11, 7)]})
# Exemple d'entrée1:
# SkiRankingSystem sys = new SkiRankingSystem();
# sys.addRecord(1, 10);
# sys.addRecord(2, 8);
# sys.getTopAthletes(3); Retour[2,1]
# sys.queryTop3Record(1); Retour[10]
# Exemple d'entrée2:
# SkiRankingSystem sys = new SkiRankingSystem();
# sys.addRecord(20, 8);
# sys.addRecord(22, 6);
# sys.addRecord(20, 6);
# sys.getTopAthletes(4);#Retour[22, 20];
# sys.addRecord(33, 5);
# sys.addRecord(22, 9);
# sys.addRecord(31, 4);
# sys.getTopAthletes(4);#Retour[31, 33, 22, 20];
# sys.addRecord(20, 8);
# sys.queryTop3Record(20);#Retour[6, 8, 8]
# sys.addRecord(20, 6);
# sys.queryTop3Record(20);#Retour[6, 6, 8]