标签:初始 存储空间 处理 lag 插入 vector ack class 行合并
题目链接:https://leetcode-cn.com/problems/insert-interval/
解法一:可以LeetCode 56 题的合并区间为基础。 将newInterval插入至intervals中,然后对intervals进行合并区间,就能够得到最终的结果。 时间复杂度:O(N)
解法二:贪心算法。
配合代码讲解:
intervals = [[1,3],[6,9]], newInterval = [2,5] [﹣∞ , 1) , [1 , 3] (3,6),[6,9] (9,∞)
1 vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { 2 if(intervals.empty()){ 3 intervals.push_back(newInterval); 4 return intervals; 5 } 6 auto start_ptr=intervals.end(); //intervals中需要删除的起始块 7 auto end_ptr=intervals.end(); // [start_ptr,end_ptr); 8 auto tmp_ptr=intervals.begin(); // 遍历指针 9 int start_pos=newInterval[0]; // 新插入区间的左端点 10 int end_pos=newInterval[1]; // 右端点 11 bool start_flag=false; // 左端点判断 ,true:表示左端点已确定 12 13 while(tmp_ptr!=intervals.end()){ 14 // 左端点,区间之外,取newInterval[0]; 15 if(newInterval[0]<(*tmp_ptr)[0]){ 16 if(!start_flag){ 17 start_pos=newInterval[0]; 18 start_ptr=tmp_ptr; 19 start_flag=true; 20 } 21 } 22 // 左端点,区间之内 23 if(newInterval[0]>=(*tmp_ptr)[0] && newInterval[0]<=(*tmp_ptr)[1]){ 24 if(!start_flag){ 25 start_pos=(*tmp_ptr)[0]; 26 start_ptr=tmp_ptr; 27 start_flag=true; 28 } 29 } 30 if(newInterval[1]<(*tmp_ptr)[0]){ 31 end_pos=newInterval[1]; 32 end_ptr=tmp_ptr; 33 break; 34 } 35 if(newInterval[1]<(*tmp_ptr)[1] && newInterval[1]<=(*tmp_ptr)[1]){ 36 end_pos=(*tmp_ptr)[1]; 37 end_ptr=++tmp_ptr; 38 break; 39 } 40 tmp_ptr++; 41 } 42 start_ptr=intervals.erase(start_ptr,end_ptr); 43 intervals.insert(start_ptr,vector<int>{start_pos,end_pos}); 44 return intervals; 45 }
关于容器操作可能使vector迭代器失效:
对于insert和erase,都能够返回迭代器。
标签:初始 存储空间 处理 lag 插入 vector ack class 行合并
原文地址:https://www.cnblogs.com/yy-1046741080/p/12234270.html