Untitled

 avatar
unknown
kotlin
a year ago
974 B
3
Indexable
class Solution {
    fun maxEvents(events: Array<IntArray>): Int {
        val N = events.size
        events.sortBy { it[0] } // sort by start
        var totalAttends = 1
        var currAttends = 1
        var merged = Pair(events[0][0], events[0][1])

        for (i in 1 until N) {
            val (lastStart, lastEnd) = merged
            val currStart = events[i][0] 
            val currEnd = events[i][1]

            if (currStart < lastEnd) { // intersection
                merged = Pair(minOf(currStart, lastStart), maxOf(currEnd, lastEnd))
                val maxAttends = merged.second - merged.first + 1
                if (currAttends < maxAttends) {
                    currAttends += 1
                    totalAttends += 1
                }
            } else { // new interval
                merged = Pair(currStart, currEnd)
                currAttends = 1
                totalAttends += 1
            }
        }
        return totalAttends
    }
}
Editor is loading...
Leave a Comment