Cover image for 面试经典150题 P57 插入区间

面试经典150题 P57 插入区间


时间轴

时间轴

2025-11-18

init

区间

题目:

先处理不能合并的,然后处理可以合并的,最后处理剩下的。对于可以合并的有:

12
new_left = std::min(new_left, curr_left);new_right = std::max(new_right, curr_right);

代码:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
#include <vector>#include <algorithm>using std::vector;class Solution {    public:	vector<vector<int> > insert(vector<vector<int> > &intervals, vector<int> &newInterval)	{		vector<vector<int> > res;		int i, n = intervals.size();		int curr_left, curr_right, new_left = newInterval[0], new_right = newInterval[1];		for (i = 0; i < n; i++) {			curr_left = intervals[i][0];			curr_right = intervals[i][1];			if (curr_right < new_left)				res.push_back({ curr_left, curr_right });			else				break;		}		// 合并区间		for (; i < n; i++) {			curr_left = intervals[i][0];			curr_right = intervals[i][1];			if (curr_left <= new_right) {				new_left = std::min(new_left, curr_left);				new_right = std::max(new_right, curr_right);			} else {				break;			}		}		res.push_back({ new_left, new_right });		for (; i < n; i++) {			curr_left = intervals[i][0];			curr_right = intervals[i][1];			res.push_back({ curr_left, curr_right });		}		return res;	}};
评论加载中…