力扣-539. 最小时间差

简介: 给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
class Solution {
    int getMinutes(string &t) {
        return (int(t[0] - '0') * 10 + int(t[1] - '0')) * 60 + int(t[3] - '0') * 10 + int(t[4] - '0');
    }

public:
    int findMinDifference(vector<string> &timePoints) {
        sort(timePoints.begin(), timePoints.end());
        int ans = INT_MAX;
        int t0Minutes = getMinutes(timePoints[0]);
        int preMinutes = t0Minutes;
        for (int i = 1; i < timePoints.size(); ++i) {
            int minutes = getMinutes(timePoints[i]);
            ans = min(ans, minutes - preMinutes); // 相邻时间的时间差
            preMinutes = minutes;
        }
        ans = min(ans, t0Minutes + 1440 - preMinutes); // 首尾时间的时间差
        return ans;
    }
};

方法:

将 timePoints排序后,最小时间差必然出现在 timePoints的两个相邻时间,或者 timePoints的两个首尾时间中。因此排序后遍历一遍 timePoints即可得到最小时间差。
根据题意,一共有 24×60=1440种不同的时间。计算两个首尾时间可以通过首减尾加1440
目录
相关文章
|
5月前
leetcode-539:最小时间差
leetcode-539:最小时间差
27 0
|
12月前
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
67 0
03_使用最小花费爬楼梯
03_使用最小花费爬楼梯
|
5月前
leetcode代码记录(使用最小花费爬楼梯
leetcode代码记录(使用最小花费爬楼梯
28 0
|
5月前
leetcode:908. 最小差值 I
leetcode:908. 最小差值 I
24 0
|
5月前
leetcode-1438:绝对差不超过限制的最长连续子数组
leetcode-1438:绝对差不超过限制的最长连续子数组
41 0
|
5月前
|
Java 索引
leetcode-746:使用最小花费爬楼梯
leetcode-746:使用最小花费爬楼梯
39 0
|
5月前
leetcode-1984:学生分数的最小差值
leetcode-1984:学生分数的最小差值
40 0
力扣 -- 746. 使用最小花费爬楼梯
力扣 -- 746. 使用最小花费爬楼梯