您的位置:首页 > Web前端

[Leetcode] 539. Minimum Time Difference 解题报告

2017-12-20 12:07 302 查看
题目

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.
思路

最直观的思路就是排序了,然后依次检查相邻的两个时间结点的分钟差,当然最后不要忘了第一个时间结点和最后一个时间结点之间的分钟差。算法的时间复杂度是O(nlogn)。还有一种思路就是利用堆,每次取出时间结点最大的一个,然后和当前结点比较。从理论上讲,这种堆的解法的时间复杂度仍然是O(nlogn),但是测试中发现堆版本的时间要少于排序版本。

代码

1、排序:

class Solution {
public:
int findMinDifference(vector<string>& timePoints) {
vector<int> times;
for (auto t : timePoints) {
int value = 60 * stoi(t.substr(0, 2)) + stoi(t.substr(3, 2));
times.push_back(value);
}
sort(times.begin(), times.end());
int ret = times[0] + 24 * 60 - t
4000
imes.back();
for (int i = 1; i < times.size(); ++i) {
ret = min(ret, times[i] - times[i - 1]);
}
return ret;
}
};
2、堆:

class Solution {
public:
int findMinDifference(vector<string>& timePoints) {
vector<int> times;
for (auto t : timePoints) {
int value = 60 * stoi(t.substr(0, 2)) + stoi(t.substr(3, 2));
times.push_back(value);
}
make_heap(times.begin(), times.end());
int first = times[0], current = times[0];
int ret = INT_MAX;
pop_heap(times.begin(), times.end());
times.pop_back();
while (!times.empty()) {
int next = times[0];
pop_heap(times.begin(), times.end());
times.pop_back();
ret = min(ret, current - next);
current = next;
}
current += 24 * 60;
ret = min(ret, current - first);
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: