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; }