给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1
示例 2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的思路是将每一个输入的时间转换成分钟数,然后正序排序,用后一个时间减去前一个时间的时间差,再将他们相互比较,最终将最小时间差求出。
鉴于这是一个leetcode算法题,所以想用一些方法将范围缩小,因为24小时的分钟数最大是1440,所以当输入数大于1440或小于2时,则返回0,减少计算时间。
class Solution {
public int findMinDifference(List<String> timePoints) {
if(timePoints.size()>1440||timePoints.size()<2)
return 0;
//当时间数小于1440时,则将输入的时间数传给time数组
int time[]=new int[timePoints.size()];
int i;
//将输入时间转换成分钟数,substring(0,2)是取输入时间数的前两个数
for(i=0;i<timePoints.size();i++){
time[i]=Integer.parseInt(timePoints.get(i).substring(0,2))*60+Integer.parseInt(timePoints.get(i).substring(3));
}
//数组正序排序
Arrays.sort(time);
//用第一个时间数减去最后一个时间数,再加1440,是排除00:00的情况
int ans=time[0]-time[time.length-1]+1440;
for(i=1;i<time.length;i++)
{
ans=Math.min(ans,time[i]-time[i-1]);
}
return ans;
}
}