给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = [“23:59”,“00:00”] 输出:1
示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”] 输出:0
提示:
2 <= timePoints.length <= 2 * 10^4
timePoints[i] 格式为 “HH:MM”
解题思路:
1、首先应该先知道小时有 0 ~ 23种可能,分钟有0~59种可能也就是说若len > 24 * 60 = 1440的话就说明至少有两个时间是重复的
2、先将线性表排序,由于是string所以会默认按字典序排序
3、最小时差就只可能是相邻两个元素产生或者首位两个元素产生
1:00 ~ 23:00 时间差为:
24 - 23 + 1 = 2 h
排序的意义重大!
代码:
class Solution {
public int findMinDifference(List<String> timePoints) {
int len = timePoints.size();
if(len > 1440) return 0;
Collections.sort(timePoints);//排序
int timeFirst = getMinutes(timePoints.get(0));
int timeLast = timeFirst;
int res = Integer.MAX_VALUE;
for(int i = 1; i < len; i ++) {
int minutes = getMinutes(timePoints.get(i));
res = Math.min(minutes - timeLast, res);
timeLast = minutes;
}
return res = Math.min(res, 1440 - timeLast + timeFirst);
}
public int getMinutes(String s) {
String a[] = s.split(":");
return Integer.parseInt(a[0]) * 60 + Integer.parseInt(a[1]);
}
}