剑指 Offer II 035. 最小时间差

力扣打卡:剑指 Offer II 035. 最小时间差

解题思路

一直想着快点做出来,结果是一直做不出来,不是小细节出问题,就是小符号出问题

思路
  • 将时间转换成分钟
  • 对分钟进行排序
  • 对分钟的最大值和最小值的差值 与 元素之间的最小值 进行比较,因为 23:59 和 00:00 相差1
  • 最大值和最小值的差值运算是 24*60 - time[time.length-1]-time[0],因为最大的分钟数就是 24*60

代码

class Solution {
    public int findMinDifference(List<String> timePoints) {
        // 先转成分钟数,然后进行分钟数统计
        HashSet<Integer> set = new HashSet<>();
        for(String s: timePoints){
            String[] time = s.split(":");
            int minute = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]); 
            if(set.contains(minute)) return 0;
            set.add(minute);
        }
        int[] time = new int[set.size()];
        int idx = 0;
        for(int x : set) time[idx++]=x; 
        Arrays.sort(time);
        int min = Integer.MAX_VALUE; // 设置为最大值
        for(int i=1; i<time.length; i++){
            min = Math.min(min,time[i]-time[i-1]);
        }
        return Math.min(min, Math.abs(24 * 60 - (time[time.length - 1] - time[0]))); // 最后对最大值和最小值进行检查
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值