力扣打卡:539. 最小时间差
解题思路
思路
-
将时间转换成分钟后进行计算
-
注意:将时间转换成分钟后,需要注意最大值和最小值之间的差值 和 元素之间的最小值进行比较
-
如 23:59 和 00:00 相差 1
-
在所有的元素进行比较完成后,进行最大值和最小值之间的比较,然后再进行 与 元素之间最小值的比较,这样才算准确
代码
class Solution {
public int findMinDifference(List<String> timePoints) {
// 先转换成分钟数,然后对分钟数进行排序,最后得到元素之间的最小值,然后进行最大值最小值之间的差值与最小值进行比较
HashSet<Integer> set = new HashSet<>();
for(String s : timePoints){
String[] time = s.split(":"); // 分割时间
int minutes = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]); // 将时间转换成分钟数
if(set.contains(minutes)) return 0;
set.add(minutes);
}
int[] time = new int[set.size()];
int idx = 0;
for(int x: set) time[idx++] = x;
Arrays.sort(time);
int min = Integer.MAX_VALUE; // 设置最大值
for(int i=1; i<time.length; i++){
min = Math.min(time[i]-time[i-1],min); // 取得元素之间的最小值
}
return Math.min(Math.abs(24*60 - (time[time.length-1] - time[0])),min); // 最后进行元素的最大值和元素的最小值差值与最小值之间的比较
}
}