解题思路
一直想着快点做出来,结果是一直做不出来,不是小细节出问题,就是小符号出问题
思路
- 将时间转换成分钟
- 对分钟进行排序
- 对分钟的最大值和最小值的差值 与 元素之间的最小值 进行比较,因为 23:59 和 00:00 相差1
- 最大值和最小值的差值运算是
24*60 - time[time.length-1]-time[0]
,因为最大的分钟数就是 24*60
代码
class Solution {
public int findMinDifference(List<String> timePoints) {
// 先转成分钟数,然后进行分钟数统计
HashSet<Integer> set = new HashSet<>();
for(String s: timePoints){
String[] time = s.split(":");
int minute = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]);
if(set.contains(minute)) return 0;
set.add(minute);
}
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(min,time[i]-time[i-1]);
}
return Math.min(min, Math.abs(24 * 60 - (time[time.length - 1] - time[0]))); // 最后对最大值和最小值进行检查
}
}