当前位置: 面试刷题>> 插入区间 (经典算法题500道)
### 题目描述
给定一个无重叠的按升序排列的区间列表 `intervals`,以及一个新的区间 `newInterval`,请将 `newInterval` 插入到列表中,使得合并后的列表仍然是按升序排列且区间无重叠。
### 示例
**示例 1**:
```
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
```
**示例 2**:
```
输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 因为新区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠, 所以将它们合并成一个区间 [3,10].
```
### PHP 示例代码
```php
function insert($intervals, $newInterval) {
$merged = [];
$i = 0;
$n = count($intervals);
// 将所有小于 newInterval 的区间添加到结果中
while ($i < $n && $intervals[$i][1] < $newInterval[0]) {
$merged[] = $intervals[$i++];
}
// 合并重叠的区间
while ($i < $n && $intervals[$i][0] <= $newInterval[1]) {
$newInterval[0] = min($newInterval[0], $intervals[$i][0]);
$newInterval[1] = max($newInterval[1], $intervals[$i][1]);
$i++;
}
// 将 newInterval 添加到结果中
$merged[] = $newInterval;
// 将剩余区间添加到结果中
while ($i < $n) {
$merged[] = $intervals[$i++];
}
return $merged;
}
```
### Python 示例代码
```python
def insert(intervals, newInterval):
merged = []
i = 0
n = len(intervals)
# 插入所有不与 newInterval 重叠的区间
while i < n and intervals[i][1] < newInterval[0]:
merged.append(intervals[i])
i += 1
# 合并重叠区间
while i < n and intervals[i][0] <= newInterval[1]:
newInterval[0] = min(newInterval[0], intervals[i][0])
newInterval[1] = max(newInterval[1], intervals[i][1])
i += 1
# 插入合并后的区间
merged.append(newInterval)
# 插入剩余的区间
while i < n:
merged.append(intervals[i])
i += 1
return merged
```
### JavaScript 示例代码
```javascript
function insert(intervals, newInterval) {
const merged = [];
let i = 0;
const n = intervals.length;
// 添加所有小于 newInterval 的区间
while (i < n && intervals[i][1] < newInterval[0]) {
merged.push(intervals[i++]);
}
// 合并重叠区间
while (i < n && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
// 添加合并后的区间
merged.push(newInterval);
// 添加剩余区间
while (i < n) {
merged.push(intervals[i++]);
}
return merged;
}
```
码小课网站中有更多相关内容分享给大家学习,涵盖算法、数据结构、编程语言等多个方面,欢迎访问学习!