LeetCode in Kotlin

1288. Remove Covered Intervals

Medium

Given an array intervals where intervals[i] = [li, ri] represent the interval [li, ri), remove all intervals that are covered by another interval in the list.

The interval [a, b) is covered by the interval [c, d) if and only if c <= a and b <= d.

Return the number of remaining intervals.

Example 1:

Input: intervals = [[1,4],[3,6],[2,8]]

Output: 2

Explanation: Interval [3,6] is covered by [2,8], therefore it is removed.

Example 2:

Input: intervals = [[1,4],[2,3]]

Output: 1

Constraints:

Solution

import java.util.PriorityQueue
import java.util.Queue

class Solution {
    fun removeCoveredIntervals(intervals: Array<IntArray>): Int {
        val q: Queue<IntArray> = PriorityQueue { a: IntArray, b: IntArray
            ->
            if (a[0] == b[0]) b[1] - a[1] else a[0] - b[0]
        }
        for (interval in intervals) {
            q.offer(interval)
        }
        var prev = q.poll()
        var count = 0
        while (q.isNotEmpty()) {
            val curr = q.poll()
            if (curr[0] >= prev[0] && curr[1] <= prev[1]) {
                count++
            } else {
                prev = curr
            }
        }
        return intervals.size - count
    }
}