返回

最小时间差: 刷力扣有道,向算法致敬

后端

刷力扣,拿下【539. 最小时间差】

开题

欢迎来到力扣刷题之旅!今天,我们将共同征服**【539. 最小时间差】** 这道算法题。这是一道中等难度的题目,考验你对时间处理和数组操作的理解。准备好了吗?让我们开始吧!

题目

给你一个只包含数字 的数组nums,其中每个数字表示一天中的某个时刻,格式为 hh:mm(小时:分钟)。请计算并返回这些时间点之间的最小时间差

示例

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

算法思路

解决这道题,我们需要遵循以下步骤:

  1. 将所有时间转换为分钟数,存储在数组times中。
  2. 对数组times进行排序。
  3. 遍历数组,计算相邻时间之间的差值。
  4. 更新最小时间差。

代码实现

Java

import java.util.Arrays;

class Solution {
    public int findMinDifference(List<String> timePoints) {
        int[] times = new int[timePoints.size()];
        for (int i = 0; i < timePoints.size(); i++) {
            String[] time = timePoints.get(i).split(":");
            times[i] = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
        }

        Arrays.sort(times);

        int minDiff = Integer.MAX_VALUE;
        for (int i = 1; i < times.length; i++) {
            int diff = times[i] - times[i - 1];
            minDiff = Math.min(minDiff, diff);
        }

        // 处理跨天的情况
        minDiff = Math.min(minDiff, times[0] + 24 * 60 - times[times.length - 1]);

        return minDiff;
    }
}

Python

from typing import List

class Solution:
    def findMinDifference(self, timePoints: List[str]) -> int:
        times = [int(t.split(':')[0]) * 60 + int(t.split(':')[1]) for t in timePoints]
        times.sort()

        min_diff = float('inf')
        for i in range(1, len(times)):
            diff = times[i] - times[i - 1]
            min_diff = min(min_diff, diff)

        # 处理跨天的情况
        min_diff = min(min_diff, times[0] + 24 * 60 - times[-1])

        return min_diff

C++

#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class Solution {
public:
    int findMinDifference(vector<string>& timePoints) {
        vector<int> times;
        for (const auto& timePoint : timePoints) {
            int hours, minutes;
            sscanf(timePoint.c_str(), "%d:%d", &hours, &minutes);
            times.push_back(hours * 60 + minutes);
        }

        sort(times.begin(), times.end());

        int minDiff = INT_MAX;
        for (int i = 1; i < times.size(); ++i) {
            minDiff = min(minDiff, times[i] - times[i - 1]);
        }

        // 处理跨天的情况
        minDiff = min(minDiff, times[0] + 24 * 60 - times[times.size() - 1]);

        return minDiff;
    }
};

结语

恭喜你!通过本文的学习,你已经掌握了如何解决**【539. 最小时间差】** 这道算法题。希望这篇文章能帮助你更深入地理解算法思维和时间处理。坚持刷力扣,不断挑战自我,算法之路上的风景一定会越来越美!