`
chriszeng87
  • 浏览: 741315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编程之美2.19区间重合判断

阅读更多

 

/*
 *  区间重合判断
 *  比如,给出待判断区间[x,y]如[1,6],以及目标区间[x1, y1],[x2,y2]....[xi, yi](如[2,3] [1,2] [3, 9]),
 *  判断[1,6]是否在目标区间中
 *
 *  做法: 先把根据各个目标区间的第一个元素xi排序(可用快排),然后将目标区间中可以合并的区间进行合并,然后
 *        在目标区间的xi中用二分查找来找待判断区间中的x,然后再判断y
 * */
#include <iostream>
using namespace std;
//sort
int partation(int low,int high,int *a,int *b) //对区间进行二次排序
{
	int par=a[low];
	int par1=b[low];
	while(low<high)
	{
		while(low<high&&a[high]>=par)
			high--;
		a[low]=a[high];
		b[low]=b[high];
		while(low<high&&a[low]<=par)
			low++;
		a[high]=a[low];
		b[high]=b[low];
	}
	a[low]=par;
	b[low]=par1;
	return low;
}

void quicksort(int low,int high,int *a,int *b)
{
	if(low<high)
	{
		int par=partation( low, high, a,b);
		quicksort(low,par-1,a,b);
		quicksort(par+1,high,a,b);
	}
}

void Quick(int *a,int*b,int length)
{
	quicksort(0,length-1,a,b);
	for(int i=0;i<length;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	for(i=0;i<length;i++)
		cout<<b[i]<<" ";
	cout<<endl;
}

//unite
void unite(int *a,int*b,int*c,int*d,int length,int& number)
{
	int temp=0;
	c[temp]=a[0];
	for(int i=1;i<=length-1;i++)
	{
		if(b[i-1]>=a[i])
			continue;
		d[temp++]=b[i-1];
		c[temp]=a[i];
	}
	d[temp]=b[length-1];
	number=temp+1;
	for(i=0;i<=temp;i++) //这里的c[i]与d[i]构成合成后的区间
		cout<<c[i]<<" ";
	cout<<endl;
	for(i=0;i<=temp;i++)
		cout<<d[i]<<" ";
	cout<<endl;
}

//lookup
bool LookUp(int *c,int *d,int begin,int end,int x,int y) //二分查找求满足条件的区间
{
	int middle;
	if(begin == end && begin == 0) { //若最后合并只得到一个数组
		if(c[0]<=x && d[0]>=y)
			return true;
		else return false;
	}
	while(begin<=end)
	{
		middle=(begin+end)/2;
		if(c[middle]<x)
			begin=middle+1;
		else
			end=middle-1;
	}
	cout<<c[end]<<" "<<c[begin]<<endl;
	if(c[end]<=x&&d[end]>=y)
		return true;
	return false;
}

bool projection(int *a,int *b,int n,int x,int y)
{
	Quick(a,b,n);
	int *c=new int [n];
	int *d=new int [n];
	int length;
	unite(a,b,c,d,n, length);
	return LookUp(c,d,0,length-1, x, y);
	delete[]c;
	delete[]d;
}

int main() {
	int n=4;
	int *a=new int [n];//对应 x1, x2, ... , xn
	int *b=new int [n];//对应 y1, y2, ... ,yn
	a[0]=1;
	a[1]=5;
	a[2]=2;
	a[3]=10;
	b[0]=3;
	b[1]=9;
	b[2]=4;
	b[3]=11;
	int x=6;
	int y=10;

/*	int n=3;
	int *a=new int [n];
	int *b=new int [n];
	a[0]=2;
	a[1]=1;
	a[2]=3;
	b[0]=3;
	b[1]=2;
	b[2]=9;	
	int x=1;
	int y=6;*/

	cout<<projection(a,b,n,x, y)<<endl;
	delete []a;
	delete []b;
	return 0;
}
 

 

分享到:
评论
2 楼 Excalibur 2011-05-04  
和二楼同感,红黑树的变种
1 楼 otupia 2011-05-04  
想起来区间树了,那个算法导论视频里讲的。

相关推荐

    Jforum2.19

    **Jforum 2.19** 是一个基于Java的开源论坛系统,以其高效、稳定和易用性而受到开发者和社区管理员的欢迎。这个版本的Jforum提供了丰富的功能,包括用户管理、论坛分类、主题发布、回复讨论、搜索功能以及各种自定义...

    htmlunit-2.19-bin

    10. **学习与使用**:要开始使用HTMLUnit,开发者需要熟悉Java编程,并理解基本的Web工作原理。官方文档、教程和社区论坛是获取帮助和学习资源的好地方。 总之,HTMLUnit-2.19-bin提供了在Java环境中模拟Web浏览器...

    Mpress 2.19 .Net程序压缩加壳工具

    《Mpress 2.19:.Net程序的压缩与加壳保护利器》 在软件开发领域,尤其是.Net平台下,程序的安全性是至关重要的。Mpress 2.19作为一个专业的.Net程序压缩和加壳工具,为开发者提供了一种有效的解决方案,确保代码不...

    海湾调试软件Cfg2.19

    【海湾调试软件Cfg2.19】是一款专为海湾主机设计的调试与配置工具,主要用于GST5000等系列主机的系统配置、联动编程、点位注册以及地址编辑等核心功能。这款软件是实现高效、精准的消防系统管理与维护的重要辅助工具...

    binutils-2.19

    总的来说,binutils-2.19是构建和管理二进制文件的核心工具之一,尤其在交叉编译领域,它的重要性不言而喻。通过理解和掌握binutils的功能和使用,开发者可以更好地驾驭各种平台间的代码转换,为多样化的硬件环境...

    git2.19最新官网版

    6. **增强的合并和分支管理**:Git的核心功能之一就是分支管理,新版本可能会有更智能的合并策略或更便捷的分支操作。 7. **与其他工具的集成**:Git通常会增强与其他开发工具(如IDEs、持续集成系统)的集成,使得...

    2.19 使用选项卡导航

    标题"2.19 使用选项卡导航"指的是如何在不依赖Google官方提供的框架或支持库的情况下,在侧向屏幕导航中实现选项卡功能。描述中的问题暗示了开发者可能遇到了Google并未在基础组件中内置选项卡小部件的挑战。 尽管...

    海湾消防主机图形显示器2.19

    2. 系统编程:用户可以通过该软件对消防主机进行编程,设置设备的参数,如报警阈值、联动逻辑等,确保系统能根据实际需求正确响应。 3. 故障诊断:当设备出现故障或异常时,软件会提供详细的故障信息,方便维护人员...

    宏碁4750g笔记本BIOS 2.19版本

    【宏碁4750g笔记本BIOS 2.19版本】是宏碁公司为4750g型号笔记本电脑发布的固件更新,主要用于优化和改进系统的硬件兼容性、稳定性以及性能。BIOS(基本输入输出系统)是计算机启动时加载的第一个软件,它控制着...

    数据结构2.19题C语言程序

    数据结构2.19题C语言程序,线性链表的运用。单链表做存储结构。

    XMOS 2.19 驱动 (伟良版)

    XMOS 2.19 驱动 伟良 定制极限版 XMOS素质高低,30%由晶振决定,20%由电源决定,50%由驱动程序决定。伟良定制极限版的XMOS型号为【SK1248L1 PAH453.03】,是小芯片的XMOS,定制版的XMOS芯片,硬件ID为:【VID_20B1&PID...

    jenkins2.19经典插件合集

    Jenkins 2.19版本是其历史中的一个重要里程碑,引入了许多改进和新特性,提高了整体性能和用户体验。在某些网络环境不佳或受到限制的情况下,安装Jenkins插件可能变得困难。为了解决这个问题,我们拥有一个专门为...

    glibc-2.19.tar.xz

    glibc-2.19.tar.xz

    jailkit-2.19

    标题中的"jailkit-2.19"指的是该工具的特定版本号,这通常意味着它包含了针对该版本的一系列修复、改进和新功能。 Jailkit的主要目标是提供一个安全的环境,限制用户在系统中的权限,防止他们执行可能破坏系统的...

    ProxifierMac V2.19(带注册码)

    ProxifierMac V2.19(带注册码) Mac OS X 10.12 亲测可用 神器

    delphi 12 控件之DxAutoInstaller.2.19.rar

    DxAutoInstaller.2.19.rar

    RE管理器2.19-美化中文版

    RE管理器2.19美化中文版,可以支持在线升级,喜欢的拿去用吧

    笛佛维修业务通2.19(旗舰版)2019破解版

    笛佛维修业务通2.19(旗舰版)适用于电脑IT、数码电子、仪表仪器、机电设备、工程机械、医疗器械等行业厂商售后服务部门、授权维修服务网点及专业维修服务企业。笛佛维修业务通2.19(旗舰版)软件简介: 本软件是专为...

    arcgis-web-appbuilder-2.19.zip

    《ArcGIS Web AppBuilder 2.19:零编码实现WebGIS开发》 ArcGIS Web AppBuilder 2.19 是Esri公司提供的一款强大的Web GIS应用构建工具,旨在帮助开发者和非编码人员轻松创建定制化的GIS应用程序。该版本无需编写...

Global site tag (gtag.js) - Google Analytics