Try   HackMD

435. Non-overlapping Intervals

題目描述

Given an array of intervals intervals where intervals[i] = [starti, endi], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.

範例

Example 1:

Input: intervals = [[1,2],[2,3],[3,4],[1,3]]
Output: 1
Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping.

Example 2:

Input: intervals = [[1,2],[1,2],[1,2]]
Output: 2
Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping.

Example 3:

Input: intervals = [[1,2],[2,3]]
Output: 0
Explanation: You don't need to remove any of the intervals since they're already non-overlapping.

Constraints:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • -5 * 104 <= starti < endi <= 5 * 104

解答

Javascript

function eraseOverlapIntervals(intervals) {
  intervals.sort((a, b) => a[1] - b[1]); // 依結束時間排序
  let count = 0;
  let end = intervals[0][1];

  for (let i = 1; i < intervals.length; i++) {
    const [curStart, curEnd] = intervals[i];
    if (curStart < end) {
      count++;
    } else {
      end = curEnd;
    }
  }

  return count;
}

MarsgoatJul 19, 2023

Python

class Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int: n = len(intervals) intervals.sort(key=lambda x: x[1]) ans, pre = 0, float('-inf') for start, end in intervals: if start < pre: ans += 1 else: pre = end return ans

Yen-Chi ChenWed, Jul 19, 2023

Reference

回到題目列表