给定一个 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;
}
}
结果如下:
网友评论