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.
题意很简单,注意这几个事项:
1)对string直接排序即可,字典排序是可以的
2)对于最后一个时间节点的计算需要加上24*60min
同样的本题注意对C++的stringstream的使用
建议和这一道题leetcode 537. Complex Number Multiplication C++中的stringstream真的很好用 一起学习
代码如下:
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <numeric>
#include <cmath>
using namespace std;
class Solution
{
public:
int findMinDifference(vector<string>& timePoints)
{
int minDif = 24 * 60;
sort(timePoints.begin(),timePoints.end());
for (int i = 0; i < timePoints.size(); i++)
{
string a = timePoints[i], b = timePoints[(i + 1) % timePoints.size()];
stringstream sa(a), sb(b);
int h1, m1, h2, m2;
char c;
sa >> h1 >> c >> m1;
sb >> h2 >> c >> m2;
int dif = (h2 - h1) * 60 + (m2 - m1);
if (i == timePoints.size() - 1)
dif += 24 * 60;
minDif = min(minDif, dif);
}
return minDif;
}
};