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);
}