# LC 539. Minimum Time Difference ### [Problem link](https://leetcode.com/problems/minimum-time-difference/) ###### tags: `leedcode` `medium` `c++` `Bucket Sort` Given a list of 24-hour clock time points in **"HH:MM"** format, return the minimum **minutes** difference between any two time-points in the list. **Example 1:** ``` Input: timePoints = ["23:59","00:00"] Output: 1 ``` **Example 2:** ``` Input: timePoints = ["00:00","23:59","00:00"] Output: 0 ``` **Constraints:** - <code>2 <= timePoints.length <= 2 * 10<sup>4</sup></code> - <code>timePoints[i]</code> is in the format **"HH:MM"** . ## Solution 1 #### C++ ```cpp= class Solution { public: int findMinDifference(vector<string>& timePoints) { vector<int> time(timePoints.size()); for (int i = 0; i < timePoints.size(); i++) { int hour = stoi(timePoints[i].substr(0, 2)); int min = stoi(timePoints[i].substr(3, 2)); time[i] = hour * 60 + min; } sort(time.begin(), time.end()); int ans = INT_MAX; for (int i = 1; i < time.size(); i++) { ans = min(ans, time[i] - time[i - 1]); } ans = min(ans, 24 * 60 - time.back() + time[0]); return ans; } }; ``` ## Solution 2 - Bucket Sort #### C++ ```cpp= class Solution { public: int findMinDifference(vector<string>& timePoints) { vector<bool> mins(24 * 60, false); for (int i = 0; i < timePoints.size(); i++) { int hour = stoi(timePoints[i].substr(0, 2)); int min = stoi(timePoints[i].substr(3, 2)); int time = hour * 60 + min; if (mins[time] == true) { return 0; } mins[time] = true; } int pre = INT_MAX; int first = INT_MAX; int last = INT_MAX; int ans = INT_MAX; for (int i = 0; i < mins.size(); i++) { if (mins[i] == true) { if (pre != INT_MAX) { ans = min(ans, i - pre); } pre = i; if (first == INT_MAX) { first = i; } last = i; } } ans = min(ans, 24 * 60 - last + first); return ans; } }; ``` >### Complexity >| | Time Complexity | Space Complexity | >| ----------- | --------------- | ---------------- | >| Solution 1 | O(nlogn) | O(n) | >| Solution 2 | O(n) | O(1) | ## Note Sol2: 排序的最小最大值都是固定的,可以用O(n)來達成跟排序O(nlogn)一樣的功能。 1. 有出現過的時間都設成true, 如果時間已經出現過, 則return 0. 2. 用三個指標pre, first, last紀錄前一個出現的時間, 第一個出現的時間,最後一個出現的時間 3. 遍歷mins更新pre, first, last, ans 4. 最後比較ans跟頭尾的時間差距(24 * 60 - last + first)