美文网首页
剑指 Offer II 035. 最小时间差

剑指 Offer II 035. 最小时间差

作者: Abeants | 来源:发表于2022-08-13 11:48 被阅读0次

    给定一个 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<String> 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. 最小时间差

          本文链接:https://www.haomeiwen.com/subject/egzcgrtx.html