LeetCode——539.最小时间差距

通过万岁!!!

  • 题目:给你一个数组,里面存储的是字符串表示的时间,格式为HH:MM,然后想办法计算出这些时间的最小时间差。
  • 思路:我们需要将字符串进行转换,然后对数组进行排序,排序之后相邻相减,然后最后一个在减去第一个(这时候第一个需要加24)就行了。
  • 技巧:
    • 用一个double的数组来表示时间,并把后面的时间转换成小数。
    • 然后使用排序,进行挨个相减,最后计算第一个加24减去最后一个。
    • 最后还需要进行四舍五入,因为存在精度误差。

伪代码

定义double类型的数组
遍历给定的时间数组,将数组的内容用:分割以后,转换成时间,存储到double类型的数组中
将double数组进行排序
定义一个最小值min,初始化为25即可
然后for遍历数组,[i+1]-[i]的值与min比较,记录最小的min
但是因为是24小时周期的,所以for结束以后,还需要再将第一个加24减去最后一个,与min比较
最终返回min*60并且进行四舍五入。

java代码

class Solution {
    public int findMinDifference(List<String> timePoints) {
        double[] times = new double[timePoints.size()];
        for (int i = 0; i < timePoints.size(); i++) {
            String[] temps = timePoints.get(i).split(":");
            times[i] = Double.parseDouble(temps[0]) + Double.parseDouble(temps[1]) / 60.0;
        }
        Arrays.sort(times);
        double min = 25;
        for (int i = 0; i < times.length - 1; i++) {
            min = Math.min(min, times[i + 1] - times[i]);
        }
        min = Math.min(times[0] + 24 - times[times.length - 1], min);
        return (int)Math.round(min * 60);
    }
}
  • 总结:题目不是很难,主要是得想让数组进行排序,然后再转换回来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值