技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

leetCode:435. Non-overlapping Intervals

leetCodeの「435. Non-overlapping Intervals」を解いた。
https://leetcode.com/problems/non-overlapping-intervals/

解法を理解するのにちょっと時間がかかったので、ここにコメント付きの解答コードを残しておく。

public int eraseOverlapIntervals(int[][] intervals) {
        if (intervals == null || intervals.length == 0) {
            return 0;
        }

        // end time (intervals[x][1]) の昇順で sort する。
        Arrays.sort(intervals, (a, b) -> a[1] - b[1]);

        // 早く終わる & 直前の interval と被らない interval を選択。
        int takenCount = 1;
        int lastEndTime = intervals[0][1];
        for (int i = 1; i < intervals.length; i++) {
            int startTime = intervals[i][0];
            if (lastEndTime <= startTime) {
                // 採用
                takenCount++;
                lastEndTime = intervals[i][1];
            }
        }

        // 削除対象数(解答) = 全intervals数 - 採用可能なintervalの最大数
        int removeCount = intervals.length - takenCount;
        return removeCount;
    }