Minimum Time Difference
MediumArrayMathStringSorting
Solution
Solution1: Sort
export function findMinDifference(timePoints: string[]): number {
const n = timePoints.length;
const minutes = timePoints.map(toMinute).sort((a, b) => a - b);
let answer = 60 * 24 - minutes[n - 1] + minutes[0];
for (let i = 0; i < n - 1; i++) {
answer = Math.min(answer, minutes[i + 1] - minutes[i]);
}
return answer;
}
function toMinute(timePoint: string): number {
const [hour, minute] = timePoint.split(':').map((v) => +v);
return 60 * hour + minute;
}
Complexity
- Time:
O(NlogN)
- Space:
O(N)
Solution2: Bucket Sort
export function findMinDifference(timePoints: string[]): number {
const MAX_SIZE = Number.MAX_SAFE_INTEGER;
const MAX_MINUTE = 24 * 60;
const minutes = new Array<boolean>(MAX_MINUTE).fill(false);
for (const timePoint of timePoints) {
const minute = toMinute(timePoint);
if (minutes[minute]) {
return 0;
}
minutes[minute] = true;
}
let prevIndex = MAX_SIZE;
let firstIndex = MAX_SIZE;
let lastIndex = MAX_SIZE;
let answer = MAX_SIZE;
for (let i = 0; i < MAX_MINUTE; i++) {
if (!minutes[i]) continue;
if (prevIndex !== MAX_SIZE) {
answer = Math.min(answer, i - prevIndex);
}
prevIndex = i;
if (firstIndex === MAX_SIZE) {
firstIndex = i;
}
lastIndex = i;
}
return Math.min(answer, 24 * 60 - lastIndex + firstIndex);
}
function toMinute(timePoint: string): number {
const [hour, minute] = timePoint.split(':').map((v) => +v);
return 60 * hour + minute;
}
Complexity
- Time:
O(N)
- Space:
O(1)
minutes
의 크기는24*60
으로, 상수이다.