1 class UndergroundSystem:
 2     def __init__(self):
 3         self.startStation = collections.defaultdict(lambda: collections.defaultdict(int))
 4         self.endStation = collections.defaultdict(lambda: collections.defaultdict(int))
 5 
 6     def checkIn(self, id: int, stationName: str, t: int) -> None:
 7         self.startStation[stationName][id] = t
 8         
 9     def checkOut(self, id: int, stationName: str, t: int) -> None:
10         self.endStation[stationName][id] = t
11         
12     def getAverageTime(self, startStation: str, endStation: str) -> float:
13         time = 0
14         customers = 0
15         for id in self.endStation[endStation]:
16             if id in self.startStation[startStation]:
17                 customers += 1
18                 time += self.endStation[endStation][id] - self.startStation[startStation][id]
19         
20         return time / customers if time else 0 

参考:https://leetcode.com/problems/design-underground-system/discuss/554871/Python3-Easy-Python-with-dict

 

我自己的代码是下面的,第51个testcase,总是通不过,不知道是float的精度问题还是数值计算的不对:

 1 class Station:
 2     def __init__(self):
 3         self.startStation = ''
 4         self.startTime = -1.0
 5         self.endStation = ''
 6         self.endTime = -1.0
 7 
 8 class UndergroundSystem:
 9 
10     def __init__(self):
11         self.dic = dict()#以cardid为key
12 
13     def checkIn(self, id: int, stationName: str, t: int) -> None:
14         station = Station()
15         station.startStation = stationName
16         station.startTime = t
17         self.dic[id] = station
18 
19     def checkOut(self, id: int, stationName: str, t: int) -> None:
20         self.dic[id].endStation = stationName
21         self.dic[id].endTime = t
22 
23     def getAverageTime(self, startStation: str, endStation: str) -> float:
24         count = 0
25         sums = 0
26         for id,record in self.dic.items():
27             if record.startStation == startStation and record.endStation == endStation:
28                 count += 1.0
29                 sums += float(record.endTime - record.startTime)
30         return round(float(sums) / count, 1) if count != 0 else 0

 

posted on 2020-03-29 12:44  Sempron2800+  阅读(211)  评论(0编辑  收藏  举报