返回
最小时间差: 刷力扣有道,向算法致敬
后端
2024-01-06 03:59:03
刷力扣,拿下【539. 最小时间差】
开题
欢迎来到力扣刷题之旅!今天,我们将共同征服**【539. 最小时间差】** 这道算法题。这是一道中等难度的题目,考验你对时间处理和数组操作的理解。准备好了吗?让我们开始吧!
题目
给你一个只包含数字 的数组nums
,其中每个数字表示一天中的某个时刻,格式为 hh:mm
(小时:分钟)。请计算并返回这些时间点之间的最小时间差 。
示例
输入:nums = ["23:59","01:00"]
输出:1
算法思路
解决这道题,我们需要遵循以下步骤:
- 将所有时间转换为分钟数,存储在数组
times
中。 - 对数组
times
进行排序。 - 遍历数组,计算相邻时间之间的差值。
- 更新最小时间差。
代码实现
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. 最小时间差】** 这道算法题。希望这篇文章能帮助你更深入地理解算法思维和时间处理。坚持刷力扣,不断挑战自我,算法之路上的风景一定会越来越美!