「每日LeetCode」2022年1月18日

本文最后更新于:2023年3月19日 晚上

  1. 最小时间差

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”

思路

先剪枝,在数组 length>1440 时,一定会有两个相同的时间,因此返回 0。再将时间字符串转化为分钟,sort 后再逐个遍历,当前和上一个的时间的差,更新并记录 res。因为时钟是循环的,所以最后还有一种可能就是,将得到最小的差和第一个最后一个时间的差比较,返回比较小的那一个。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @param {string[]} timePoints
* @return {number}
*/
var findMinDifference = function (timePoints) {
if (timePoints > 1440) return 0;
timePoints = timePoints.map((time) => {
const [hour, minute] = time.split(":");
return +hour * 60 + +minute;
});
timePoints.sort((a, b) => a - b);
let res = Infinity;
for (let i = 0; i < timePoints.length - 1; i++) {
const cur = timePoints[i],
next = timePoints[i + 1];
res = Math.min(res, Math.abs(cur - next));
}
return Math.min(
res,
timePoints[0] + 1440 - timePoints[timePoints.length - 1]
);
};