友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
539. 最小时间差
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = ["23:59","00:00"] 输出:1
示例 2:
输入:timePoints = ["00:00","23:59","00:00"] 输出:0
提示:
-
2 <= timePoints.length <= 2 * 104 -
timePoints[i]格式为 "HH:MM"
思路分析
将字符串转成分钟数排序取差值即可。注意收尾两端的处理。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-03-04 19:31:53
*/
public int findMinDifference(List<String> timePoints) {
Set<String> set = timePoints.stream().collect(Collectors.toSet());
if (set.size() < timePoints.size()) {
return 0;
}
PriorityQueue<Integer> queue = new PriorityQueue<>(timePoints.size());
for (String point : timePoints) {
queue.offer(parse(point));
}
int result = Integer.MAX_VALUE;
int first = queue.poll();
int last = first;
while (!queue.isEmpty()) {
int i = queue.poll();
result = Math.min(result, i - last);
last = i;
}
result = Math.min(result, first + 24 * 60 - last);
return result;
}
private Integer parse(String point) {
int index = point.indexOf(":");
return Integer.parseInt(point.substring(0, index)) * 60
+ Integer.parseInt(point.substring(index + 1));
}
参考资料
-
539. 最小时间差 - 官方题解 — 这鸽巢原理用的真是绝了!

