当前位置: 首页 > 后端技术 > Python

力扣-1396.设计地下系统设计地铁系统【Python】

时间:2023-03-26 16:34:49 Python

LeetCode1396.设计地下系统设计地铁系统【Medium】【Python】【设计】问题LeetCode实现支持三种方法的类UndergroundSystem:1。checkIn(intid,stringstationName,intt)一个身份证号等于id的顾客,在时间t到达车站stationName。一个顾客一次只能签到一个地方。2.checkOut(intid,stringstationName,intt)身份证号等于id的顾客,在时间t.3从车站stationName出来。getAverageTime(stringstartStation,stringendStation)返回在startStation和endStation之间行进的平均时间。平均时间是根据之前直接发生的从startStation到endStation的所有行进计算得出的。对getAverageTime的调用始终有效。您可以假设所有对checkIn和checkOut方法的调用是一致的。也就是说,如果一个顾客在某个车站的时间t1上车,那么他会在时间t2,t2>t1。所有事件按时间顺序发生。示例1:Input["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"][[],[45,"莱顿",3],[32,"天堂",8],[27,"莱顿",10],[45,"滑铁卢",15],[27,"滑铁卢",20],[32,"剑桥",22],["天堂","剑桥"],["莱顿","滑铁卢"],[10,"莱顿",24],["莱顿","滑铁卢"],[10,"滑铁卢",38],["莱顿","滑铁卢"]]输出[null,null,null,null,null,null,null,14.0,11.0,null,11.0,null,12.0]ExplanationUndergroundSystemundergroundSystem=newUndergroundSystem();undergroundSystem.checkIn(45,“莱顿”,3);undergroundSystem.checkIn(32,“天堂”,8);undergroundSystem.checkIn(27,“莱顿”,10);undergroundSystem.checkOut(45,“滑铁卢”,15);undergroundSystem.checkOut(27,“滑铁卢”,20);undergroundSystem.checkOut(32,“剑桥”,22));undergroundSystem.getAverageTime("天堂","Cambridge");//返回14.0。从“天堂”(时间8)到“剑桥”(时间22)只有一次旅行undergroundSystem.getAverageTime("Leyton","Waterloo");//return11.0.从“Leyton”到“Waterloo”有两次旅行,id=45的客户从time=3到time=15,id=27的客户从time=10到time=20。所以平均时间是((15-3)+(20-10))/2=11.0undergroundSystem.checkIn(10,"Leyton",24);undergroundSystem.getAverageTime("Leyton","Waterloo");//返回11.0undergroundSystem.checkOut(10,"Waterloo",38);undergroundSystem.getAverageTime("Leyton","Waterloo");//return12.0约束条件:最多操作20000次。1<=id,t<=10^6所有字符串由大写组成,小写英文字母和数字。1<=stationName.length<=10答案在实际值的10^-5以内将被接受为正确的。问题力扣请您现实一个UndergroundSystem,它支持以下3种方法:1.checkIn(intid,stringstationName,intt)编号为id的乘客在时间t进入地铁站stationName。一名乘客同一时间只能进出一个地铁站。2.checkOut(intid,stringstationName,intt)编号为id的乘客在时间t离开地铁站stationName。3.getAverageTime(stringstartStation,stringendStation)返回地铁站startStation到地铁站endStation所花费的平均时间。按平均时间计算的行程包括目前为止从startStation直接到endStation的所有行程。调用getAverageTime时,所询问的路线至少包含一次行程。您可以假设对checkIn和checkOut的所有调用都是合乎逻辑的。也就是说,如果一个顾客在时间t1到达某个地铁站,那么他的出发时间t2必须满足t2>t1。所有事件都按时间顺序给出。示例:输入:["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"][[],[45,"莱顿",3],[32,"天堂",8],[27,"莱顿",10],[45,"滑铁卢",15],[27,"滑铁卢",20],[32,"剑桥",22],["天堂","剑桥"],["莱顿","滑铁卢"],[10,"莱顿",24],["莱顿","滑铁卢"],[10,"滑铁卢",38],["莱顿","滑铁卢"]]输出:[null,null,null,null,null,null,null,14.0,11.0,null,11.0,null,12.0]解释:UndergroundSystemundergroundSystem=newUndergroundSystem();undergroundSystem.checkIn(45,"Leyton",3);undergroundSystem.checkIn(32,"Paradise",8);undergroundSystem.checkIn(27,“莱顿”,10);undergroundSystem.checkOut(45,“滑铁卢”,15);undergroundSystem.checkOut(27,“滑铁卢”,20);undergroundSystem.checkOut(32,“剑桥”,22);undergroundSystem.getAverageTime("天堂","剑桥");//返回14.0。从“天堂”(时间8)到“剑桥”(时间22)只有一趟undergroundSystem.getAverageTime("Leyton","Waterloo");//返回11.0。从“莱顿”到“滑铁卢”总共有2次旅行。id=45的乘客在time=3出发并在time=15到达,而id=27的乘客在time=10出发并在time=20到达。所以平均时间是((15-3)+(20-10))/2=11.0undergroundSystem.checkIn(10,"Leyton",24);undergroundSystem.getAverageTime("Leyton","Waterloo");//return11.0undergroundSystem.checkOut(10,"Waterloo",38);undergroundSystem.getAverageTime("Leyton","Waterloo");//返回12.0提示:总共最多有20000次操作。1<=id,t<=10^6所有字符串都包含大写字母、小写字母和数字。1<=stationName.length<=10且标准答案错误在10^-5以内的结果视为正确结果。思考设计问题字典来存储到达和离开的乘客字典的key是站台名称,value是一个二维列表[id,t]Python3代码classUndergroundSystem:def__init__(self):self.enterstation={}self.leavestation={}defcheckIn(self,id:int,stationName:str,t:int)->None:如果stationName不在self.enterstation:self.enterstation[stationName]=[[id,t]]其他:self.enterstation[stationName].append([id,t])defcheckOut(self,id:int,stationName:str,t:int)->None:如果stationName不在self.leavestation:self.leavestation[stationName]=[[id,t]]else:self.leavestation[stationName].append([id,t])defgetAverageTime(self,startStation:str,endStation:str)->float:res=[]开始=self.enterstation[startStation]end=self.leavestation[endStation]foriinstart:forjinend:#sameidifi[0]==j[0]:res.append(abs(j[1]-i[1]))returnfloat(sum(res)/len(res))#你的UndergroundSystem对象将被实例化并这样调用:#obj=UndergroundSystem()#obj.checkIn(id,stationName,t)#obj.checkOut(id,stationName,t)#param_3=obj.getAverageTime(startStation,endStation)GitHub链接Python参考python3字典存储