题目如下
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = [“23:59”,“00:00”]
输出:1
示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0
解题方法
我们注意到,时间点最多只有 24 * 60 个,因此,当 timePoints 长度超过 24 * 60,说明有重复的时间点,提前返回 0。
接下来:
首先,遍历时间列表,将其转换为“分钟制”列表 mins,比如,对于时间点 13:14,将其转换为 13 * 60 + 14。
接着将“分钟制”列表按升序排列,然后将此列表的最小时间 mins[0] 加上 24 * 60 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
最后遍历“分钟制”列表,找出相邻两个时间的最小值即可。
class Solution
{
public:
int findMinDifference(vector<string>& timePoints)
{
if (timePoints.size() > 24 * 60)
{
return 0;
}
vector<int> mins;
for (auto t : timePoints)
{
mins.push_back(stoi(t.substr(0, 2)) * 60 + stoi(t.substr(3)));
}
sort(mins.begin(), mins.end());
mins.push_back(mins[0] + 24 * 60);
int res = 24 * 60;
for (int i = 1; i < mins.size(); ++i)
{
res = min(res, mins[i] - mins[i - 1]);
}
return res;
}
};