题目描述
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.
输入是一个时间的数组,要求求出最小的时间间隔。思路是按照24小时对时间排序,然后求相邻两个时间间隔的时间差与最大时间与最小时间的时间差。比较得到最小的时间间隔。
C++ 实现
class Solution {
public:
int findMinDifference(vector<string>& timePoints) {
struct Time
{
uint8_t hour;
uint8_t min;
Time(const uint8_t hour, const uint8_t min)
: hour(hour), min(min)
{
}
bool operator<(const Time& other) const
{
if (hour < other.hour)
{
return true;
}
else if (hour == other.hour)
{
return min < other.min;
}
return false;
}
int operator-(const Time& other) const
{
int hour_diff = hour - other.hour;
int min_diff = min - other.min;
return hour_diff * 60 + min_diff;
}
};
vector<Time> times;
times.reserve(timePoints.size());
for (const string& time_point : timePoints)
{
const size_t idx = time_point.find(":");
const uint8_t hour = stoi(time_point.substr(0,idx));
const uint8_t min = stoi(time_point.substr(idx + 1,time_point.size() - idx));
times.emplace_back(Time{hour,min});
}
sort(times.begin(), times.end());
int res = INT_MAX;
for (int i = 0; i < times.size() - 1; i++)
{
const Time& t1 = times[i];
const Time& t2 = times[i + 1];
res = min(t2 - t1, res);
}
const Time first_t(times.front().hour + 24, times.front().min);
const Time& last_t = times.back();
res = min(first_t - last_t, res);
return res;
}
};