题目:Given a list of 24-hour clock time points in “Hour:Minutes” format, find the minimum minutes difference between any two time points in the list.
Example 1:
Input: [“23:59”,”00:00”]
Output: 1
Note:
The number of time points in the given list is at least 2 and won’t exceed 20000.
The input time is legal and ranges from 00:00 to 23:59.
一开始的想法是直接两两比较每两个之间的时差然后每找到一个最小的就赋值给一个标记变量,谁知道这么做就超时了,只能换成快排先排个序,然后看每两个时间之间的差值。
下面这段代码是超时的代码:
class Solution {
public:
int GetNum(string tp){
return (60*((tp[0]-'0')*10 + (tp[1]-'0')) + (tp[3]-'0')*10 + tp[4]-'0');
}
int Difference(string a, string b){
int Min = 1440;
if(GetNum(a)-GetNum(b) >= 0 && GetNum(a)-GetNum(b) < Min)
Min = GetNum(a)-GetNum(b);
if(GetNum(a)+24*60-GetNum(b) >= 0 && GetNum(a)+24*60-GetNum(b) < Min)
Min = GetNum(a)+24*60-GetNum(b);
if(GetNum(b)-GetNum(a) >= 0 && GetNum(b)-GetNum(a) < Min)
Min = GetNum(b)-GetNum(a);
if(GetNum(b)+24*60-GetNum(a) >= 0 && GetNum(b)+24*60-GetNum(a) < Min)
Min = GetNum(b)+24*60-GetNum(a);
return Min;
}
int findMinDifference(vector<string>& timePoints) {
int MinMinute = 1440;
for(int i = 0; i < timePoints.size(); i++)
{
for(int j = i+1; j < timePoints.size(); j++)
{
if(MinMinute > Difference(timePoints[i], timePoints[j]))
MinMinute = Difference(timePoints[i], timePoints[j]);
}
}
return MinMinute;
}
};
下面的这段代码是先用快排之后然后比较相邻时间的时差来做的:
class Solution {
public:
int GetNum(string tp){
return (60*((tp[0]-'0')*10 + (tp[1]-'0')) + (tp[3]-'0')*10 + tp[4]-'0');
}
int findMinDifference(vector<string>& timePoints) {
sort(timePoints.begin(), timePoints.end());
int MinMinute = GetNum(timePoints[0])+24*60-GetNum(timePoints[timePoints.size()-1]);
for(int i = 0; i < timePoints.size()-1; i++)
{
if(GetNum(timePoints[i+1])-GetNum(timePoints[i]) < MinMinute)
MinMinute = GetNum(timePoints[i+1])-GetNum(timePoints[i]);
}
return MinMinute;
}
};