LeetCode 539. 最小时间差
题目描述
思路分析
解法一:排序 + 相邻差值(推荐)
核心思路:
- 将时间字符串转换为分钟数并排序。
- 最小差值一定出现在排序后相邻时间或首尾跨天之间。
复杂度分析:
- 时间复杂度:O(n log n),排序开销。
- 空间复杂度:O(n)。
import java.util.Arrays;
import java.util.List;
class Solution {
public int findMinDifference(List<String> timePoints) {
int n = timePoints.size();
int[] mins = new int[n];
for (int i = 0; i < n; i++) {
String t = timePoints.get(i);
int hour = Integer.parseInt(t.substring(0, 2));
int min = Integer.parseInt(t.substring(3));
mins[i] = hour * 60 + min;
}
Arrays.sort(mins);
int ans = 1440;
for (int i = 1; i < n; i++) {
ans = Math.min(ans, mins[i] - mins[i - 1]);
}
// 首尾跨天
ans = Math.min(ans, 1440 - mins[n - 1] + mins[0]);
return ans;
}
}
import "sort"
func findMinDifference(timePoints []string) int {
n := len(timePoints)
mins := make([]int, n)
for i, t := range timePoints {
hour := (int(t[0]-'0')*10 + int(t[1]-'0'))
minute := (int(t[3]-'0')*10 + int(t[4]-'0'))
mins[i] = hour*60 + minute
}
sort.Ints(mins)
ans := 1440
for i := 1; i < n; i++ {
diff := mins[i] - mins[i-1]
if diff < ans {
ans = diff
}
}
cross := 1440 - mins[n-1] + mins[0]
if cross < ans {
ans = cross
}
return ans
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 539. 最小时间差 | 中等 | 排序 |
| 681. 最近时刻 | 中等 | 模拟 |
| 949. 给定数字能组成的最大时间 | 中等 | 枚举 |
| 1064. 不动点 | 简单 | 排序 |
| 252. 会议室 | 简单 | 排序 |
| 253. 会议室 II | 中等 | 堆 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!