# 16.09.2024 [539. Minimum Time Difference]
Min difference in a list of times `hh:mm` #medium
16.09.2024
539. Minimum Time Difference medium
blog post
Join me on Telegram
https://t.me/leetcode_daily_unstoppable/737
Problem TLDR
Min difference in a list of times hh:mm #medium
Intuition
The main problem is how to handle the loop:
// 12:00
// 1:00
// 23:00
One way is to repeat the array twice. (Actually, only the first value matters).
Approach
let’s use
windowiteratorwe can use a bucket sort
Complexity
Time complexity:
𝑂(𝑛𝑙𝑜𝑔(𝑛)) or 𝑂(𝑛+𝑚), where m is minutes = 24 * 60Space complexity:
𝑂(𝑛) or 𝑂(𝑚)
Code
fun findMinDifference(timePoints: List<String>) =
timePoints.map { it.split(":")
.let { it[0].toInt() * 60 + it[1].toInt() }}
.sorted().let { it + (it[0] + 24 * 60) }
.windowed(2).minOf { it[1] - it[0] }
pub fn find_min_difference(time_points: Vec<String>) -> i32 {
let mut times: Vec<_> = time_points.iter().map(|s| {
s[0..2].parse::<i32>().unwrap() * 60 + s[3..5].parse::<i32>().unwrap()
}).collect();
times.sort_unstable(); times.push(times[0] + 60 * 24);
times.windows(2).map(|w| w[1] - w[0]).min().unwrap()
}
int findMinDifference(vector<string>& timePoints) {
vector<bool> times(24 * 60 + 1);
for (int i = 0; i < timePoints.size(); i++) {
int t = std::stoi(timePoints[i].substr(0, 2)) * 60 +
std::stoi(timePoints[i].substr(3, 5));
if (times[t]) return 0; else times[t] = true;
}
int res = times.size(); int j = -1; int first = -1;
for (int i = 0; i < times.size(); i++) if (times[i]) {
if (j >= 0) res = min(res, i - j); else first = i;
j = i;
}
return min(res, first + 24 * 60 - j);
}

