0
点赞
收藏
分享

微信扫一扫

leetcode:539.最小时间差

题目

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

示例 1:

示例 2:

提示:

解法

由于求任意两个时间的最小时间差,如果不进行排序的话,两两比较,复杂度为 O ( N 2 ) O(N^2) O(N2),进行排序后再进行比较的话,只需要比较前后以及最后及第一个的时间差即可,时间复杂度为 O ( N l o g N ) O(NlogN) O(NlogN)
另外就是将字符串转化为分钟,需要有这样的一个函数。
特殊情况

  • 时间长度大于24*60,则有24小时重合的时间出现,最小时间差为0;

  • 第一个时间与最后一个时间也需要进行比较;

  • python

class Solution(object):
    def findMinDifference(self, timePoints):
        """
        :type timePoints: List[str]
        :rtype: int
        """
        n = len(timePoints)
        if (n > 24 * 60):  # 判断长度,如果长度包含一天的每一分钟,则最短时间差为0
        	return 0
        timePoints.sort()
        ans = float('inf')
        t0_minuter = self.get_minuters(timePoints[0])
        pre_minuter = t0_minuter
        for i in range(1, n):
            cur_minuter = self.get_minuters(timePoints[i])
            ans = min(ans, cur_minuter-pre_minuter)
            pre_minuter = cur_minuter
        ans = min(ans, t0_minuter+1440-pre_minuter)  # 第一个与最后一个进行比较,添加24小时
        return ans

    def get_minuters(self, timePoint):
        h, m = int(timePoint[:2]), int(timePoint[-2:])
        return h * 60 + m
  • c++
class Solution {
public:
    int findMinDifference(vector<string>& timePoints) {
        int n = timePoints.size();
        if (n > 24*60)
        {
            return 0;
        }

        sort(timePoints.begin(), timePoints.end());
        int ans = INT_MAX;
        int t0_minuters = getMinuters(timePoints[0]);
        int pre_minuters = t0_minuters;
        for(int i=1; i<n; i++)
        {
            int minuters = getMinuters(timePoints[i]);
            ans = min(ans, minuters-pre_minuters);
            pre_minuters = minuters;
        }
        ans = min(ans, t0_minuters+1440-pre_minuters);
        return ans;

    }

    int getMinuters(string &t)
    {
        return ((int(t[0]-'0')*10 + int(t[1]-'0')))*60 + int(t[3]-'0')*10 + int(t[4]-'0');
    }
};

复杂度分析

  • 时间复杂度:
    • O ( N l o g N ) O(NlogN) O(NlogN) 排序需要的时间
  • 空间复杂度
    • O ( N ) O(N) O(N) O ( l o g N ) O(logN) O(logN) 排序需要的空间,取决于不同语言的实现
举报

相关推荐

0 条评论