当前位置: 面试刷题>> 无重叠区间 (经典算法题500道)


### 题目描述补充 **题目:无重叠区间** 给定一个区间的集合,每个区间都表示为闭区间 `[start, end]`,其中 `start` 是区间的起始位置,`end` 是区间的结束位置,且满足 `start <= end`。请找出需要移除的区间的最小数量,使得剩余区间互不重叠。 **注意**: - 你可以认为区间的起始位置和结束位置都是非负整数。 - 区间 `[1, 2]` 和区间 `[2, 3]` 有一个公共点,因此它们被视为重叠区间。 ### 示例 **输入**: `[[1,2],[2,3],[3,4],[1,3]]` **输出**: 1 **解释**: 移除 `[1,3]` 后,剩下的区间 `[1,2]`、`[2,3]` 和 `[3,4]` 互不重叠。 ### PHP 示例代码 ```php function eraseOverlapIntervals($intervals) { if (empty($intervals)) { return 0; } // 按照区间的结束位置进行排序 usort($intervals, function($a, $b) { return $a[1] - $b[1]; }); $count = 1; // 至少保留一个区间 $end = $intervals[0][1]; // 初始化为第一个区间的结束位置 for ($i = 1; $i < count($intervals); $i++) { if ($intervals[$i][0] >= $end) { // 如果当前区间的起始位置大于或等于前一个区间的结束位置,说明不重叠 $end = $intervals[$i][1]; // 更新结束位置 $count++; } } // 需要移除的区间数量 = 总区间数 - 不重叠的区间数 return count($intervals) - $count; } // 测试用例 $intervals = [[1,2],[2,3],[3,4],[1,3]]; echo eraseOverlapIntervals($intervals); // 输出 1 ``` ### Python 示例代码 ```python def eraseOverlapIntervals(intervals): if not intervals: return 0 # 按照区间的结束位置进行排序 intervals.sort(key=lambda x: x[1]) count = 1 # 至少保留一个区间 end = intervals[0][1] # 初始化为第一个区间的结束位置 for interval in intervals[1:]: if interval[0] >= end: # 如果当前区间的起始位置大于或等于前一个区间的结束位置,说明不重叠 end = interval[1] # 更新结束位置 count += 1 # 需要移除的区间数量 = 总区间数 - 不重叠的区间数 return len(intervals) - count # 测试用例 intervals = [[1,2],[2,3],[3,4],[1,3]] print(eraseOverlapIntervals(intervals)) # 输出 1 ``` ### JavaScript 示例代码 ```javascript function eraseOverlapIntervals(intervals) { if (intervals.length === 0) { return 0; } // 按照区间的结束位置进行排序 intervals.sort((a, b) => a[1] - b[1]); let count = 1; // 至少保留一个区间 let end = intervals[0][1]; // 初始化为第一个区间的结束位置 for (let i = 1; i < intervals.length; i++) { if (intervals[i][0] >= end) { // 如果当前区间的起始位置大于或等于前一个区间的结束位置,说明不重叠 end = intervals[i][1]; // 更新结束位置 count++; } } // 需要移除的区间数量 = 总区间数 - 不重叠的区间数 return intervals.length - count; } // 测试用例 const intervals = [[1,2],[2,3],[3,4],[1,3]]; console.log(eraseOverlapIntervals(intervals)); // 输出 1 ``` **码小课网站中有更多相关内容分享给大家学习**,希望大家能够继续深入学习算法和数据结构的知识,提高自己的编程能力。
推荐面试题