539. Minimum Time Difference

https://leetcode.com/problems/minimum-time-difference/

Given a list of 24-hour clock time points in "Hour:Minutes" format, find the minimum minutes difference between any two time points in the list.

Example 1:

Input: ["23:59","00:00"]
Output: 1

Note:

  1. The number of time points in the given list is at least 2 and won't exceed 20000.
  2. The input time is legal and ranges from 00:00 to 23:59.
---
class Solution {
public int findMinDifference(List<String> timePoints) {
// bucket sort for linear runtime
boolean[] buckets = new boolean[24 * 60];
for (String time: timePoints) {
int minute = Integer.parseInt(time.substring(0, 2), 10) * 60 + Integer.parseInt(time.substring(3), 10);
if (buckets[minute]) {
return 0;
}
buckets[minute] = true;
}
int ans = Integer.MAX_VALUE, first = -1, current = -1, prev = -1;
for (int i = 0; i < buckets.length; i++) {
if (buckets[i]) {
if (first == -1) {
first = i;
} else {
current = i;
ans = Math.min(ans, current - prev);
}
prev = i;
}
}
// Check for wrap around, consider distance between first, and last
return Math.min(ans, buckets.length - current + first);
}
}