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,把每个时间转成分钟之后存放,当天和第二天都存放一遍。
之后对于这个数据进行遍历,主要是三种情况。
- 如果数等于0,就不存在该分钟的时间。
- 如果数大于1,就代表相隔0分钟,直接输出。
- 数等于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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2021-01-18 ECNU 3416 摄氏华氏转换
2021-01-18 ECNU 2852 统计字母频率
2021-01-18 ECNU 2987 判断 IP
2021-01-18 ECNU 2849 成绩排序
2021-01-18 ECNU 1000 A + B Problem