剑指 Offer II 035. 最小时间差

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

示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1

示例 2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0

提示:
2 <= timePoints <= 2 * 104
timePoints[i] 格式为 "HH:MM"

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/569nqc
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路及方法

先对数组进行排序,那么最小分钟数只会存在相邻时间段之间或者首尾差。同时满足鸽巢原理,如果时间的总数超过24 * 60 = 1440,那么总有两个时间段相等,直接返回0。

class Solution {
    public int findMinDifference(List timePoints) {
        int n = timePoints.size();
        if (n > 24 * 60) return 0;

        // 排序
        Collections.sort(timePoints);
        int first = getMin(timePoints.get(0));
        int prev = first;
        int res = Integer.MAX_VALUE;

        for (int i = 1; i < n; i++) {
            int cur = getMin(timePoints.get(i));
            res = Math.min(res, Math.abs(cur - prev));
            prev = cur;
        }

        // 比较首尾
        res = Math.min(res, first + 1440 - prev);
        return res;
    }

    public int getMin(String string) {
        int hour = Integer.parseInt(string.substring(0, 2));
        int min = Integer.parseInt(string.substring(3, 5));
        return hour * 60 + min;
    }
}

结果如下:

你可能感兴趣的:(剑指 Offer II 035. 最小时间差)