思路:使用数组模拟哈希表,一天总共1440分钟,所以新建一个长度为1440的布尔数组。将时间转换成对应下标整数,然后timeFlags[min] = true; 如果布尔数组存在相同下标整数,说明数组中有相同时间,最小时间差为0。在find函数中查找最小时间差的时候,定义两个标记变量,first标记数组中为true的第一个变量的下标,last标记数组中为true的最后一个变量的下标。如果timeFlags[i],pre >= 0时,判断更新当前数组的最小值。最后将数组第一个为true的变量下标 first 加上1440减去数组最后一个为true的变量下标last与之前记录的最小时间差进行比较,哪个小返回哪一个。
classSolution{publicintfindMinDifference(List<String> timePoints){if(timePoints.size()>1440){return0;}boolean[] timeFlags =newboolean[1440];for(String time : timePoints){String[] t = time.split(":");int min =Integer.parseInt(t[0])*60+Integer.parseInt(t[1]);if(timeFlags[min]){return0;}
timeFlags[min]=true;}returnfind(timeFlags);}publicintfind(boolean[] timeFlags){int first = timeFlags.length,last =-1;int pre =-1,minDiff = timeFlags.length;for(int i =0; i < timeFlags.length ; i++){if(timeFlags[i]){if(pre >=0){
minDiff =Math.min(i-pre,minDiff);}
pre = i;
first =Math.min(i,first);
last =Math.max(i,last);}}returnMath.min(first + timeFlags.length - last,minDiff);}}