一、题目地址
https://leetcode-cn.com/problems/minimum-time-difference/
二、具体代码
/**
* @param {string[]} timePoints
* @return {number}
*/
// 时间复杂度: O(n)
// 空间复杂度: O(n)
var findMinDifference = function(timePoints) {
if(timePoints.length > 24 * 60) {
return 0;
}
let timesArray = new Array();
for(let time of timePoints) {
let currentTime = time.split(':');
timesArray.push((parseInt(currentTime[0]) * 60) + parseInt(currentTime[1]));
}
timesArray.sort((a, b) => a - b);
timesArray.push(timesArray[0] + (24 * 60));
let res = 24 * 60;
for(let i=1; i<timesArray.length; i++) {
res = Math.min(res, (timesArray[i] - timesArray[i - 1]));
}
return res;
};
三、补充思路
我们注意到,时间点最多只有 24 * 60 个,因此,当 timePoints 长度超过 24 * 60,说明有重复的时间点,提前返回 0。
接下来:
1、首先,遍历时间列表,将其转换为“分钟制”列表 mins,比如,对于时间点 13:14,将其转换为 13 * 60 + 14。
2、接着将“分钟制”列表按升序排列,然后将此列表的最小时间 mins[0] 加上 24 * 60 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
3、最后遍历“分钟制”列表,找出相邻两个时间的最小值即可。
四、补充部分
关注公众号:【深漂程序员小庄】:
内含丰富的学习资源和面试经验(不限前端、java),还有学习交流群可加,并且还有各大厂大佬可一起交流学习,一起进步~添加小庄微信,回复【加群】,可加入互联网技术交流群: