539. 最小时间差(2022-1-18)
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = [“23:59”,“00:00”]
输出:1
示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0
解题思路
排序之后,遍历查找最小的差
注意:
- 最大的值和最小的值之间的差可能才是最小的,(比如
"23:55","00:00"
他们之差其实为5) - 可以通过鸽巢原理减少运算次数,24小时用分表示,可以有1440种情况,也就是说如果有超过1440个时间,那么一定有重复的时间,最小差就一定为0
var findMinDifference = function(timePoints) {
if(timePoints.length > 1440) return 0
const getM = (str) => str.slice(-2)*1 + str.slice(0,2)*60
let arr = timePoints.sort()
let dp = Infinity
arr.reduceRight((a,b) => (dp = Math.min(getM(a) - getM(b), dp)) ? b : b)
dp = Math.min(1440 - getM(arr[arr.length-1]) + getM(arr[0]),dp)
return dp
};