Leetcode539. 最小时间差

题目

给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。

示例 1:

输入: ["23:59","00:00"]
输出: 1

备注:

列表中时间数在 2~20000 之间。
每个时间取值在 00:00~23:59 之间。

C++解法

#include 
#include 
#include 
#include 
using namespace std;

struct Time {
    int hour = 0;
    int minute = 0;
    Time(string value = "00:00") {
        if (value.size() == 5) {
            for (int i = 0; i < 2; ++i) {
                hour = 10 * hour + (value[i] - '0');
            }
            for (int i = 3; i < 5; ++i) {
                minute = 10 * minute + (value[i] - '0');
            }
        }
    }
    int gap(Time & time) {
        int value1 = hour * 60 + minute;
        int value2 = time.hour * 60 + time.minute;
        int minValue = value1 < value2 ? value1 : value2;
        int maxValue = value1 > value2 ? value1 : value2;
        return min(maxValue - minValue, 1440 - maxValue + minValue);
    }
};
class Solution {
public:
    int findMinDifference(vector& timePoints) {
        sort(timePoints.begin(), timePoints.end());
        string item;
        int minValue = INT32_MAX;
        int delta = 0;
        Time lastTime, currentTime;
        for (int i = 0; i <= timePoints.size(); ++i) {
            currentTime = Time(timePoints[i % timePoints.size()]);
            if (i != 0) {
                delta = currentTime.gap(lastTime);
                if (delta < minValue) minValue = delta;
            }
            lastTime = currentTime;
        }
        return minValue;
    }
};
int main(int argc, const char * argv[]) {
    // insert code here...
    Solution solution;
    vector times;
    times = {"00:00", "23:59"};
    cout << solution.findMinDifference(times) << endl;
    return 0;
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-difference

你可能感兴趣的:(Leetcode539. 最小时间差)