通过万岁!!!
- 题目:给你一个数组,里面存储的是字符串表示的时间,格式为HH:MM,然后想办法计算出这些时间的最小时间差。
- 思路:我们需要将字符串进行转换,然后对数组进行排序,排序之后相邻相减,然后最后一个在减去第一个(这时候第一个需要加24)就行了。
- 技巧:
- 用一个double的数组来表示时间,并把后面的时间转换成小数。
- 然后使用排序,进行挨个相减,最后计算第一个加24减去最后一个。
- 最后还需要进行四舍五入,因为存在精度误差。
伪代码
定义double类型的数组
遍历给定的时间数组,将数组的内容用:分割以后,转换成时间,存储到double类型的数组中
将double数组进行排序
定义一个最小值min,初始化为25即可
然后for遍历数组,[i+1]-[i]的值与min比较,记录最小的min
但是因为是24小时周期的,所以for结束以后,还需要再将第一个加24减去最后一个,与min比较
最终返回min*60并且进行四舍五入。
java代码
class Solution {
public int findMinDifference(List<String> timePoints) {
double[] times = new double[timePoints.size()];
for (int i = 0; i < timePoints.size(); i++) {
String[] temps = timePoints.get(i).split(":");
times[i] = Double.parseDouble(temps[0]) + Double.parseDouble(temps[1]) / 60.0;
}
Arrays.sort(times);
double min = 25;
for (int i = 0; i < times.length - 1; i++) {
min = Math.min(min, times[i + 1] - times[i]);
}
min = Math.min(times[0] + 24 - times[times.length - 1], min);
return (int)Math.round(min * 60);
}
}
- 总结:题目不是很难,主要是得想让数组进行排序,然后再转换回来。