题目
539.最小时间差
题目大意
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
样例
数据规模
思路
为了处理数据方便,这里用python语言。一天最多就1440分钟,不妨考虑用数组标记时间,一旦出现一个时间 ( x , y ) (x,y) (x,y),就转换成 x ∗ 60 + y x*60+y x∗60+y 分钟,这样标记 v i s [ x + 60 + y ] + + vis[x+60+y]++ vis[x+60+y]++,如果某一个 v i s [ i ] > = 2 ( i ∈ [ 0 , 1440 ) vis[i]>=2(i∈[0,1440) vis[i]>=2(i∈[0,1440)那么直接返回0,因为有两个相同时间,可以让差值最小为0,其余情况可以考虑两个 v i s [ x 1 ] = v i s [ x 2 ] = 1 vis[x1]=vis[x2]=1 vis[x1]=vis[x2]=1并且 ∣ x 1 − x 2 ∣ |x1-x2| ∣x1−x2∣尽可能小,线性枚举即可,为了解决环形,可以直接环形展开,即相当于 [ 0 , 1440 ) [0,1440) [0,1440)在复制一份,然后再线性求解。
代码
class Solution:
def findMinDifference(self, timePoints: List[str]) -> int:
last=1e9
a=[0 for i in range(2880+2)]
for it in timePoints:
x,y=map(int,it.split(':'))
a[x*60+y]+=1
a[x*60+y+1440]+=1
if(a[x*60+y]>=2):
return 0
last=min(last,x*60+y)
ans=1e9
for i in range(2880+1):
if(a[i] and i!=last):
ans=min(ans,i-last)
last=i
return ans