0x
BAN USERInstead of sorting, you could use an array of 24 to store the intervals in order, each start index storing the end index.
function getTotalTime(times) {
const intervals = Array(24).fill(0)
for (let t of times) {
let [start, end] = t
if (intervals[start] &&
end > intervals[start]) {
intervals[start] = end
}
else intervals[start] = end
}
// second pass, counting the intervals
let i = 0
let total = 0
let count = 0
let end = 0
while (i < intervals.length) {
if (intervals[i] && intervals[i] > end) {
count += (intervals[i] - i)
// amotize
if (i < end) count -= (end - i)
end = intervals[i]
}
if (i == end) {
total += count
count = 0
}
i += 1
}
return total
}
- 0x March 03, 2019