天天看點

539. Minimum Time Difference(最小時差)———附帶思路和完整代碼0 效果1 題目2 思路3 代碼

0 效果

539. Minimum Time Difference(最小時差)———附帶思路和完整代碼0 效果1 題目2 思路3 代碼

1 題目

539. Minimum Time Difference(最小時差)———附帶思路和完整代碼0 效果1 題目2 思路3 代碼

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