难度:中等
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入: [“23:59”,“00:00”]
输出: 1
备注:
列表中时间数在 2~20000 之间。
每个时间取值在 00:00~23:59 之间。
解题思路:
将所有时间点转化为分钟数,由于分钟数最多为24*60,所以可以将其映射到一个大小为1440的数组中进行求解,数组中存储 该位置索引对应的分钟数 所出现的次数,若存在大于1的情况,则最小时间差必为0。之后,按照顺序求解相邻分钟数的最小差值即可,最后还要注意不要忘记比较首尾时间
代码实现:
class Solution {
public int findMinDifference(List<String> timePoints) {
int len = timePoints.size();
if(len > 1440){
return 0;
}
int[] minutes = new int[1440];
for(String s : timePoints) {
String[] time = s.split(":");
int k = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]);
if(minutes[k] >= 1){
return 0;
}
minutes[k]++;
}
int min = 1440,first = -1,pre = -1;
for(int cur = 0;cur < minutes.length;cur++){
if(minutes[cur] == 1){
if(pre != -1){
min = Math.min(min,cur-pre);
}else{
first = cur;
}
pre = cur;
}
}
min = Math.min(min,1440-pre+first);
return min;
}
}
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(n)