539.最小时间差

题目

539.最小时间差

题目大意

给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

样例

img

数据规模

img

思路

为了处理数据方便,这里用python语言。一天最多就1440分钟,不妨考虑用数组标记时间,一旦出现一个时间 ( x , y ) (x,y) (x,y),就转换成 x ∗ 60 + y x*60+y x60+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| x1x2尽可能小,线性枚举即可,为了解决环形,可以直接环形展开,即相当于 [ 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenix_ZengHao

创作不易,能否打赏一瓶饮料?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值