题目链接
https://leetcode-cn.com/problems/minimum-time-difference/
题目
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例
示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1示例 2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0
提示
2 <= timePoints <= 2 *
timePoints[i]
格式为 "HH:MM"
思路
用sort函数对所有时间进行排序,这里需要自定义一个cmp排序规则,将时越大的排在越后面,当时一样时,分越大的排在越后面。然后只要比较相邻两个时间直接的分钟差以及第一个时间和最后一个时间之间的分钟差即可,取这里面的最小值。
C++ Code
class Solution {
public:
static bool cmp(string x,string y){ //手写排序规则 按时间升序排序
int Xshi= (x[0]-'0')*10+x[1]-'0';
int Xfen= (x[3]-'0')*10+x[4]-'0';
int Yshi= (y[0]-'0')*10+y[1]-'0';
int Yfen= (y[3]-'0')*10+y[4]-'0';
if(Xshi>Yshi || (Xshi==Yshi && Xfen>= Yfen)) return false;
else return true;
}
//输入时间已排序好 x小于y 求两个时间分钟差函数
int Time_diff(string x,string y){
int Xshi= (x[0]-'0')*10+x[1]-'0';
int Xfen= (x[3]-'0')*10+x[4]-'0';
int Yshi= (y[0]-'0')*10+y[1]-'0';
int Yfen= (y[3]-'0')*10+y[4]-'0';
int diff=(Yshi-Xshi)*60;
if(Yfen>Xfen) diff+=Yfen-Xfen;
else diff-=Xfen-Yfen;
return diff;
}
int findMinDifference(vector<string>& timePoints) {
//排序后相邻两个之间进行对比 另外第一个和最后一个也要对比
sort(timePoints.begin(),timePoints.end(),cmp);
//第一个和最后一个对比
int T_min=min( Time_diff(timePoints[0],timePoints[timePoints.size()-1]),
1440-(Time_diff(timePoints[0],timePoints[timePoints.size()-1])) );
//相邻两个进行对比
for(int i=1;i<timePoints.size();i++)
{
T_min=min(T_min, Time_diff(timePoints[i-1],timePoints[i]) );
}
return T_min;
}
};