0 效果

1 题目
2 思路
把时间转换为分钟存储在容器中并排序,依次比较每个相邻元素并记录最小值,最后与特殊处理时间循环交接处的值进行比较得到结果。
3 代码
class Solution {
public:
int findMinDifference(vector<string>& timePoints) {
vector<int> timeSum;
for (int i = 0; i < timePoints.size(); ++i) {//转换成分钟
timeSum.emplace_back(stoi(timePoints[i].substr(0, 2))*60 + stoi(timePoints[i].substr(3, 2)));
}
sort(timeSum.begin(), timeSum.end(), [](int a, int b){return a > b;});
int ans = 60*24;
for(int i = 1;i < timeSum.size();i++){
int diff = timeSum[i - 1] - timeSum[i];
ans = (ans < diff) ? ans : diff;
}
//处理循环情况
int tmpTime = 60*24 - timeSum.front() + timeSum.back();
return tmpTime < ans? tmpTime : ans;
}
};
int cmp(const void* p1, const void* p2){
return *(int*)p2 - *(int*)p1;
}
int min(int a, int b){
return a < b? a:b;
}
int findMinDifference(char ** timePoints, int timePointsSize){
int* timeSum = (int*) malloc(sizeof(int) * (timePointsSize + 1));
int a,b;
for(int i = 0;i < timePointsSize;i++){
sscanf(timePoints[i], "%d:%d", &a, &b);
timeSum[i] = a*60 + b;
}
qsort(timeSum, timePointsSize, sizeof(int), cmp);
int ans = 60*24;
for(int i = 1;i < timePointsSize;i++){
int diff = timeSum[i - 1] - timeSum[i];
ans = min(diff, ans);
}
int tempAns = 60*24 - timeSum[0] + timeSum[timePointsSize - 1];
return min(tempAns, ans);
}