Find Right Interval

Problem

You are given an array of intervals, where intervals[i] = [starti, endi] and each starti is unique.

The right interval for an interval i is an interval j such that startj >= endi and startj is minimized. Note that i may equal j.

Return an array of right interval indices for each interval i. If no right interval exists for interval i, then put -1 at index i.

Example 1:

Input: intervals = [[1,2]]
Output: [-1]
Explanation: There is only one interval in the collection, so it outputs -1.

Example 2:

Input: intervals = [[3,4],[2,3],[1,2]]
Output: [-1,0,1]
Explanation: There is no right interval for [3,4].
The right interval for [2,3] is [3,4] since start0 = 3 is the smallest start that is >= end1 = 3.
The right interval for [1,2] is [2,3] since start1 = 2 is the smallest start that is >= end2 = 2.

Example 3:

Input: intervals = [[1,4],[2,3],[3,4]]
Output: [-1,2,-1]
Explanation: There is no right interval for [1,4] and [3,4].
The right interval for [2,3] is [3,4] since start2 = 3 is the smallest start that is >= end1 = 3.

Constraints:

  • 1 <= intervals.length <= 2 * 104
  • intervals[i].length == 2
  • -106 <= starti <= endi <= 106
  • The start point of each interval is unique.

Solution

class Solution {
    public int[] findRightInterval(int[][] intervals) {
        var start = new PriorityQueue<Integer>((l, r) -> {
            return Integer.compare(intervals[l][0], intervals[r][0]);
        });
        var end = new PriorityQueue<Integer>((l, r) -> {
            return Integer.compare(intervals[l][1], intervals[r][1]);
        });
        for (int i = 0; i < intervals.length; i++) {
            end.offer(i);
            start.offer(i);
        }

        var ans = new int[intervals.length];
        Arrays.fill(ans, -1);

        while (!end.isEmpty()) {
            while (!start.isEmpty() && intervals[end.peek()][1] > intervals[start.peek()][0]) {
                start.poll();
            }
            if (start.isEmpty()) {
                break;
            }
            ans[end.poll()] = start.peek();
        }

        return ans;
    }
}

Recent posts from blogs that I like

Paintings of the Franco-Prussian War: 2 The Siege of Paris

As winter grew colder, Parisians started to starve. A city known for its food and restaurants had to scavenge meals based on horse, dog, cat and even rat.

via The Eclectic Light Company

Impromptu disaster recovery

via fasterthanlime

Notes on implementing Attention

Some notes on implementing attention blocks in pure Python + Numpy. The focus here is on the exact implementation in code, explaining all the shapes throughout the process. The motivation for why attention works is not covered here - there are plenty of excellent online resources explaining it. Seve...

via Eli Bendersky