给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
(题目来源:力扣网)
示例 1:
输入: ["23:59","00:00"]
输出: 1
解决方法一:流式循环比较计算(内存超出限制)
public static int findMinDifference(List<String> timePoints) {
//新建一个date数组,用于存储转换后的date
Date[] dates=new Date[timePoints.size()];
//循环实现timePoints的所有值经过转换后赋值给dates数组
for (int i = 0; i < timePoints.size(); i++) {
try {
//将字符串转换成日期格式
Date date = new SimpleDateFormat("HH:mm").parse(timePoints.get(i));
dates[i]=date;
} catch (ParseException e) {
e.printStackTrace();
}
}
//差值数组
long[] differences=new long[(dates.length-1)*dates.length];
final int[] i = {0};
Arrays.stream(dates).distinct().forEach(dates1->{ Arrays.stream(dates).distinct().forEach(dates2->{
if(dates1.hashCode()!=dates2.hashCode()){//判断不是同一个值
differences[i[0]]=Math.abs((dates1.getTime()-dates2.getTime())/60000L);
differences[i[0]]=differences[i[0]]>720L?(1440L-differences[i[0]]):differences[i[0]];//因为时间是循环制,所以有时候补数"更小"
//System.out.println("differences["+ i[0] +"]="+differences[i[0]]);
i[0] = i[0] +1;
}
});
});
//给difference数组排序
Arrays.sort(differences);
//获取最小值
Long mindiffer=differences[0];
return Integer.valueOf(mindiffer.toString());
}
解决方法二:简单排序(满足要求)
执行用时:171 ms
内存消耗:44.8 MB
public static int findMinDifference(List<String> timePoints) {
//新建一个date数组,用于存储转换后的date
Date[] dates=new Date[timePoints.size()];
//循环实现timePoints的所有值经过转换后赋值给dates数组
for (int i = 0; i < timePoints.size(); i++) {
try {
//将字符串转换成日期格式
Date date = new SimpleDateFormat("HH:mm").parse(timePoints.get(i));
dates[i]=date;
} catch (ParseException e) {
e.printStackTrace();
}
}
//给dates数组排序
Arrays.sort(dates);
//差值数组
long[] differences=new long[dates.length];
//循环获取差值
for (int i = 0; i < dates.length; i++) {
if(i==dates.length-1){
differences[i]=Math.abs((dates[i].getTime()-dates[0].getTime())/60000L);
}else{
differences[i]=Math.abs((dates[i+1].getTime()-dates[i].getTime())/60000L);
}
differences[i]=differences[i]>720L?(1440L-differences[i]):differences[i];//因为时间是循环制,所以有时候补数"更小"
}
//给difference数组排序
Arrays.sort(differences);
//获取最小值
Long mindiffer=differences[0];
return Integer.valueOf(mindiffer.toString());
}