算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 最小时间差,我们先来看题面:
https://leetcode-cn.com/problems/minimum-time-difference/
Given a list of 24-hour clock time points in "HH:MM" format, return the minimum minutes difference between any two time-points in the list.
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例
示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1
示例 2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0
解题
仿时间戳,以分钟为单位把每个时间的时间戳给计算出来
这里要计算当前时间和当前时间后一天这个时间点的的时间,主要是为了防止跨夜计算的情况,比如题目里的输入:timePoints = ["23:59","00:00"],输出:1
class Solution {
public int findMinDifference(List<String> timePoints) {
int size=timePoints.size();
//仿时间戳做个今明两天的数组
int[] time=new int[size*2];
for (int i = 0,idx=0; i <size; idx=idx+2,i++) {
String[] split = timePoints.get(i).split(":");
int h = Integer.parseInt(split[0]);
int m = Integer.parseInt(split[1]);
//计算当前时间的时间戳
time[idx]=h*60+m;
//计算后一天当前时间的时间戳
//60*24=1440分钟
time[idx+1]=time[idx]+1440;
}
Arrays.sort(time);
int res=Integer.MAX_VALUE;
for (int i = 0; i+1 < time.length; i++) {
res=Math.min((time[i+1]-time[i]),res);
}
return res;
}
}
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。
上期推文:
LeetCode刷题实战524:通过删除字母匹配到字典里最长单词
LeetCode刷题实战535:TinyURL 的加密与解密