题目:
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = [“23:59”,“00:00”]
输出:1
示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0
提示:
2 <= timePoints <= 2 * 104
timePoints[i] 格式为 “HH:MM”
注意:本题与主站 539 题相同: https://leetcode-cn.com/problems/minimum-time-difference/
答案:
class Solution {
public int findMinDifference(List<String> timePoints) {
//首先,遍历时间列表,将其转换为“分钟制”列表 mins,比如,对于时间点 13:14,将其转换为 13 * 60 + 14。
//接着将“分钟制”列表按升序排列,然后将此列表的最小时间 mins[0] 加上 24 * 60 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
if (timePoints.size() > 1440) {//最大可能只有1440种,超过肯定有重复
return 0;
}
int[] nums = new int[timePoints.size()];
for(int i = 0; i < timePoints.size(); i++){
String s = timePoints.get(i);
int hour = Integer.parseInt(s.substring(0, 2));
int min = Integer.parseInt(s.substring(3, 5));
nums[i] = hour * 60 + min;
//System.out.println(nums[i]);
}
Arrays.sort(nums);
int min = nums[0] + 24 * 60 - nums[nums.length - 1];
for(int i = 1; i < nums.length; i++){
min = Math.min(min, nums[i] - nums[i - 1]);
if(min == 0) break;
}
return min;
}
}