LeetCode 539. Minimum Time Difference

LeetCode 539. Minimum Time Difference(最小时间差)

题目

链接

https://leetcode-cn.com/problems/minimum-time-difference/

问题描述

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

示例

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

提示

2 <= timePoints.length <= 2 * 104
timePoints[i] 格式为 "HH:MM"

思路

二十四小时制,但是需要考虑相隔一天的情况,所以这里增加24小时,当48小时算。

首先用鸽巢原理,一天只有24小时,1440分钟,如果超过这个数量,就代表一定有重复时间。

然后建立数组,2*1440,把每个时间转成分钟之后存放,当天和第二天都存放一遍。

之后对于这个数据进行遍历,主要是三种情况。

  1. 如果数等于0,就不存在该分钟的时间。
  2. 如果数大于1,就代表相隔0分钟,直接输出。
  3. 数等于1,就可以记录和上一个1的差值,这是一个时间间隔数,ans是最小时间间隔。

输出答案即可。

复杂度分析

时间复杂度 O(n)
空间复杂度 O(1)

代码

Java

    public int findMinDifference(List<String> timePoints) {
        int n = timePoints.size();
        if (n > 1440) {
            return 0;
        }
        int[] day = new int[1440 * 2 + 10];
        for (String s : timePoints) {
            String[] time = s.split(":");
            int minute = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
            day[minute]++;
            day[minute + 1440]++;
        }

        int ans = 1440, last_1 = -1;
        for (int i = 0; i < 2880; i++) {
            if (day[i] == 0) {
                continue;
            }
            if (day[i] > 1) {
                ans = 0;
                return ans;
            } else if (last_1 != -1) { // now the day[i] = 1
                ans = Math.min(ans, i - last_1);
            }
            last_1 = i;
        }
        return ans;
    }
posted @ 2022-01-18 23:32  cheng102e  阅读(64)  评论(0编辑  收藏  举报