问题描述:
- 给定一个 24 小时制(小时:分钟
HH:MM
)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
核心思路:
- 要注意到一天时间点可能性只有
24 * 60
种,如果给定时间数组中超过了这个数,则说明必定存在重复值。 - 该题的思路也比较简单,把所有字符转成分钟数再排序即可进行比较。
- 关键在于还需要把数组中的最小时间
times[0]
加上 24 * 60
追加到数组尾部,将新的数与原来数组尾部的数进行比较。
代码实现:
class Solution
{
public:
int findMinDifference(vector<string>& timePoints)
{
if(timePoints.size() >= 24*60) return 0;
int m = timePoints.size();
vector<int> times(m);
string tmp;
for(int i = 0; i < m; ++i)
{
tmp = timePoints[i];
int hour = stoi(tmp.substr(0, 2));
int minute = stoi(tmp.substr(3, 2));
times[i] = hour * 60 + minute;
}
sort(times.begin(), times.end());
times.emplace_back(times[0]+24*60);
int ans = INT_MAX;
for(int i = 1; i < times.size(); ++i)
{
ans = min(ans, times[i] - times[i-1]);
if(ans == 0) return 0;
}
return ans;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27