力扣 题目57--插入区间
题目
题解
在力扣 题目56--合并区间中我们有了合并的方法 那么我们不是可以直接让newInterval加入intervals然后执行56题的方法不就行了
复杂度有点高 我们可以根据排列插入这样 能删掉一行sort 然后可以找一下合并的大概区间其他的不用动这样复杂度应该就会大大降低了
(我这里只删了sort 后面方法暂时没有修改完)
代码
1 #include <iostream> 2 #include <vector> 3 #include<algorithm> 4 using namespace std; 5 vector<vector<int>> merge(vector<vector<int>>& intervals) { 6 int n = intervals.size(); 7 vector<vector<int>> res; 8 vector<int> nums; 9 for (int i = 0; i < n; ++i) { 10 nums.push_back(intervals[i][0]); 11 } 12 for (int i = 0; i < n; ++i) { 13 nums.push_back(intervals[i][1]); 14 } 15 sort(nums.begin() + n, nums.end()); 16 for (int i = 0, j = 0; i < n; ++i) { 17 if (i == n - 1 || nums[i + 1] > nums[n + i]) { 18 res.push_back({ nums[j], nums[n + i] }); 19 j = i + 1; 20 } 21 } 22 return res; 23 } 24 25 class Solution { 26 public: 27 vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { 28 int begin = 0; 29 int end = 0; 30 bool add = false; 31 for (int i = 0; i < intervals.size(); i++) { 32 if (newInterval[0] < intervals[i][0]) { 33 intervals.insert(intervals.begin()+i, newInterval); 34 add = true; 35 break; 36 } 37 } 38 if (!add) { 39 intervals.push_back(newInterval); 40 } 41 //2.找哪些是有可能重叠的 42 43 //intervals.push_back(newInterval); 44 return merge(intervals);; 45 //return intervals; 46 } 47 }; 48 int main() { 49 Solution sol; 50 vector<vector<int>> intervals = { {1,2} ,{3,5},{6,7},{8,10},{12,16} }; 51 vector<int> newInterval = { 10,12 }; 52 vector<vector<int>> result= sol.insert(intervals, newInterval); 53 for (int i = 0; i < result.size(); i++) { 54 for (int j = 0; j < result[i].size(); j++) { 55 cout << result[i][j] << " "; 56 } 57 cout << endl; 58 } 59 }