力扣-56-合并区间

如果将所有区间按照左端点进行排序,那么能够合并的区间一定是连续的

class Solution {
public:
	int randomInRange(int start, int end) {
		srand(time(NULL));
		return rand() % (end - start + 1) + start;
	}

	int paritition(vector<vector<int>>& data, int start, int end) {

		int index = randomInRange(start, end);
		int small = start - 1;
		swap(data[index], data[end]);

		for (index = start; index < end; ++index) {
			if (data[index][0] < data[end][0]) {
				++small;
				if (small!=index)
					swap(data[index], data[small]);
			}
		}
		++small;
		swap(data[small], data[end]);
		return small;
	}

	void quickSort(vector<vector<int>>& data, int start, int end) {
		if (start == end) return;

		int index = paritition(data, start, end);
		if (index > start) quickSort(data, start, index-1);
		if (index < end) quickSort(data, index+1, end);
	}

	vector<vector<int>> merge(vector<vector<int>>& intervals) {
		vector<vector<int>> ret;
		// 将数组按照左端点进行排序——快排
		quickSort(intervals, 0, intervals.size() - 1);

		ret.push_back(intervals[0]);
		for (int i = 1; i < intervals.size(); ++i) {
			if (intervals[i][0] > ret[ret.size() - 1][1]) {
				ret.push_back(intervals[i]);
			}
			else {
				ret[ret.size() - 1][1] = max(intervals[i][1], ret[ret.size() - 1][1]);
			}
		}
		return ret;
	}
};

一些小细节上思考得不够清晰,调试了半天
结果好像效率也不怎么样

看官方,!?怎么就写这么少?!用sort不讲武德

芜湖!——自己写的排序比库方法差一大截,我其实是没想到按数组首元素排能直接用sort的

天!以后能用sort我绝对不自己写了

posted @ 2022-08-15 16:42  YaosGHC  阅读(98)  评论(0)    收藏  举报