57. Insert Interval
Posted qiang-wei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了57. Insert Interval相关的知识,希望对你有一定的参考价值。
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]]
Example 2:
Input: intervals =[[1,2],[3,5],[6,7],[8,10],[12,16]]
, newInterval =[4,8]
Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval[4,8]
overlaps with[3,5],[6,7],[8,10]
.
解1:正常解法,时间复杂度O(n)
class Solution { public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { vector<vector<int>> res; int n = intervals.size(); int i = 0; while(i < n && intervals[i][1] < newInterval[0]) { res.push_back(intervals[i]); ++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; } res.push_back(newInterval); while(i < n)res.push_back(intervals[i++]); return res; } };
解2:利用STL函数equal_range()进行二分查找
class Solution { public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { auto compare = [](vector<int> a, vector<int> b) {return a[1] < b[0];}; auto itRange = equal_range(intervals.begin(),intervals.end(),newInterval,compare); auto it1 = itRange.first, it2 = itRange.second; if (it1 == it2) intervals.insert(it1,newInterval); else { it2--; (*it2)[0] = min(newInterval[0],(*it1)[0]); (*it2)[1] = max(newInterval[1],(*it2)[1]); intervals.erase(it1,it2); } return intervals; } };
以上是关于57. Insert Interval的主要内容,如果未能解决你的问题,请参考以下文章