给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
提示:
2 <= timePoints.length <= 2 * 104
timePoints[i]
格式为 "HH:MM"
解题思路:① 先将List中的每个字符串转换为一天中对应的分钟数
② 对分钟数数组进行排序,然后挨个遍历数组中每两个相邻元素的差值,就能得出最小时间差(特别要注意,数组中第一个元素和最后一个元素,可能第一个元素代表的是第二天最早的时间,最后一个元素代表的是第一天最晚的时间,所以需要用1440 - 最后一个元素 + 第一个元素,和上面的最小时间差做最后的对比。选择最小的,比如示例一,如果不做对比返回是 1439 ,实际是 1 )
代码和提交截图如下:
class Solution {
public int findMinDifference(List<String> timePoints) {
int[] time = new int[timePoints.size()];
for(int i = 0 ; i < timePoints.size() ; i++){
time[i] = returnMin(timePoints.get(i));
}
Arrays.sort(time);
int minTime = Integer.MAX_VALUE;
for(int i = 1 ; i < time.length ; i++){
int temp = time[i] - time[i-1];
if(temp < minTime){
minTime = temp;
}
}
int spe = 1440 - time[time.length-1] + time[0];
if(spe < minTime){
minTime = spe;
}
return minTime;
}
private int returnMin(String s){
int min = 0;
min = (s.charAt(0)-'0')*600 + (s.charAt(1)-'0')*60 + (s.charAt(3)-'0')*10 + s.charAt(4)-'0';
return min;
}
}
总结: 感觉今天的每日一题稍微简单,必一般的中等简单一点。