【算法与数据结构】56、LeetCode合并区间

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解

一、题目

在这里插入图片描述

二、解法

  思路分析:本题比较简单。排序+判断交集即可实现。博主给出两版代码,第一版运行时间稍长,占用内存小,因为快排函数和erase函数都比较占用时间。
  程序如下

// 第一版
class Solution {
   
	static bool cmp(const vector<int>& a, const vector<int>& b) {
   
		if (a[0] == b[0]) return a[1] < b[1];
		return a[0] < b[0];
	}
public:
	vector<vector<int>> merge(vector<vector<int>>& intervals) {
   
		sort(intervals.begin(), intervals.end(), cmp);
		for (int i = 0; i < intervals.size() - 1; i++) {
   
			if (intervals[i][1] >= intervals[i + 1][0]) {
    // 如果第i个区间和第i-1个区间挨着
				intervals[i][1] = max(intervals[i][1], intervals[i + 1][1]); // 合并区间
				intervals.erase(intervals.begin() + i + 1);
				i--;
			}
		}
		return intervals;
	}
};

  运行时间较短,但是多用了一个result变量,占用内存较大,比较函数cmp用lambda表达式代替了。

// 第二版
class Solution {
   
public:
	vector<vector<int>> merge(vector<vector<int>>& intervals) {
    
		sort(intervals.begin(), intervals.end(), [](const vector<int>&a, const vector<int> b){
    return a[0] < b[0]; });	// 排序函数用了lambda表达式
		vector<vector<int>> result;
		result.push_back(intervals[0]);
		for (int i = 1; i < intervals.size(); i++) {
   
			if (result.back()[1] >= intervals[i][0]) {
    // 如果第i个区间和第i-1个区间挨着
				result.back()[1] = max(result.back()[1], intervals[i][1]); // 合并区间
			}
			else result.push_back(intervals[i]);
		}
		return result;
	}
};

复杂度分析:

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),一个快速排序。
  • 空间复杂度: O ( 1 ) O(1) O(1),有一个快排,最差情况(倒序)时,需要n次递归调用。因此确实需要O(n)的栈空间
    可以看出代码并不复杂。

三、完整代码

# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;

//class Solution {
   
//public:
//	vector<vector<int>> merge(vector<vector<int>>& intervals) { 
//		sort(intervals.begin(), intervals.end(), [](const vector<int>&a, const vector<int> b){ return a[0] < b[0]; });	// 排序函数用了lambda表达式
//		vector<vector<int>> result;
//		result.push_back(intervals[0]);
//		for (int i = 1; i < intervals.size(); i++) {
   
//			if (result.back()[1] >= intervals[i][0]) { // 如果第i个区间和第i-1个区间挨着
//				result.back()[1] = max(result.back()[1], intervals[i][1]); // 合并区间
//			}
//			else result.push_back(intervals[i]);
//		}
//		return result;
//	}
//};

class Solution {
   
	static bool cmp(const vector<int>& a, const vector<int>& b) {
   
		if (a[0] == b[0]) return a[1] < b[1];
		return a[0] < b[0];
	}
public:
	vector<vector<int>> merge(vector<vector<int>>& intervals) {
   
		sort(intervals.begin(), intervals.end(), cmp);
		for (int i = 0; i < intervals.size() - 1; i++) {
   
			if (intervals[i][1] >= intervals[i + 1][0]) {
    // 如果第i个区间和第i-1个区间挨着
				intervals[i][1] = max(intervals[i][1], intervals[i + 1][1]); // 合并区间
				intervals.erase(intervals.begin() + i + 1);
				i--;
			}
		}
		return intervals;
	}
};

int main() {
   
	//vector<vector<int>> intervals = { {1, 3}, {2, 6},{8, 10},{15, 18} };
	vector<vector<int>> intervals = {
    {
   1, 4}, {
   0, 2},{
   3, 5} };
	Solution s1;
	vector<vector<int>> result = s1.merge(intervals);
	for (vector<vector<int>>::iterator it = result.begin(); it != result.end(); it++) {
   
		for (vector<int>::iterator jt = (*it).begin(); jt != (*it).end(); jt++) {
   
			cout << *jt << " ";
		}
		cout << endl;
	} 
	system("pause");
	return 0;
}

end

相关推荐

  1. LeetCode 56 合并区间

    2024-01-03 15:32:03       31 阅读
  2. LeetCode56.合并区间

    2024-01-03 15:32:03       27 阅读
  3. Leetcode56_合并区间

    2024-01-03 15:32:03       14 阅读
  4. leetcode56--合并区间

    2024-01-03 15:32:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 15:32:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 15:32:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 15:32:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 15:32:03       20 阅读

热门阅读

  1. 数据结构OJ实验7-树结构及应用

    2024-01-03 15:32:03       31 阅读
  2. MongoDB聚合:$addField

    2024-01-03 15:32:03       38 阅读
  3. 大数据系列之:读取parquet文件统计数据量

    2024-01-03 15:32:03       36 阅读
  4. Mac 彻底删除 node 和 npm

    2024-01-03 15:32:03       37 阅读
  5. 详解汇编cll ret push pop 并附源码

    2024-01-03 15:32:03       43 阅读
  6. MySQL5.7更新的内容

    2024-01-03 15:32:03       33 阅读
  7. 微服务(12)

    2024-01-03 15:32:03       36 阅读
  8. bash脚本从ini文件读取设置

    2024-01-03 15:32:03       41 阅读
  9. Word2Vec原理+gensim实现

    2024-01-03 15:32:03       45 阅读