题目描述:
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。
示例 1:
输入: [“23:59”,“00:00”]
输出: 1
备注:
列表中时间数在 2~20000 之间。
每个时间取值在 00:00~23:59 之间。
代码
class Solution {
public int findMinDifference(List<String> timePoints) {
List<Integer> tem = new ArrayList<>();
for (String string : timePoints) {
int index = string.indexOf(":");
int hour = Integer.parseInt(string.substring(0, index));
int min = Integer.parseInt(string.substring(index + 1));
tem.add(hour * 60 + min);
}
Collections.sort(tem,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
int min = Integer.MAX_VALUE;
for (int i = 0; i < tem.size() - 1; i++) {
min = Math.min(tem.get(i + 1) - tem.get(i), min);
if(min == 0){
return min;
}
}
int last = Math.min(tem.get(tem.size() - 1) - tem.get(0), 1440 - tem.get(tem.size() - 1) + tem.get(0));
min = Math.min(min, last);
System.out.println(tem.toString());
return min;
}
}
排名靠前的代码
class Solution {
public int findMinDifference(List<String> timePoints) {
int res;
int l = timePoints.size();
int [] a=new int [1440];
int first=-1,last=-1;
int min=-1;
int i=0,j,k;
for(String s:timePoints){
k=(s.charAt(0)-'0')*600+(s.charAt(1)-'0')*60+(s.charAt(3)-'0')*10+(s.charAt(4)-'0');
a[k]++;
if(a[k]>1)return 0;
i++;
}
if(min<0){
for(first=0;a[first]==0;first++);
for(last=1439;a[last]==0;last--);
min=last-first;
if(min>720)min=1440-min;
i=first;
for(j=i+1;j<=last;j++)if(a[j]>0){
if(j-i<min)min=j-i;
i=j;
}
}
return min;
}
}