快速处理区间合并问题的一个优秀思路(效率取决于区间可取范围)

这算不上算法,只是一个我认为优秀的思路:

#include 
const int maxm=1000000;
int vis[maxm];
int main(){
	int n;
	scanf("%d",&n);
	int l,r;
	for(int i=0;i0则表示i被某一段区间所覆盖,
	for(int i=0;i<10;i++) printf("%d",vis[i]>0?1:0); 
	return 0;
}

    如上面的代码,以前当我们处理区间合并问题的时候往往是通过排序然后处理判断起点与终点进而完成区间的合并,复杂度为n*logn+n,且代码挺多的,而如果我们的问题只是想知道某些个点是否在任意一个区间内,或单纯的合并区间,我们可以用上面这种复杂度为区间可取范围maxm的算法迅速得到结果.简洁高效.

    最终vis中连续的正数即为最后合并的区间,

    而核心思维也很明显,点i前面的起点比终点多那自然它在某个区间上.

你可能感兴趣的:(算法,做题笔记,算法与数据结构)