`
xiaocai1988
  • 浏览: 7320 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

区间覆盖问题

 
阅读更多

给定一个源区间[x,y](y>=x)和N个无序的目标区间[x1,y1][x2,y2]......[xn,yn],判断区间[x,y]在不在目标区间内。

 

/**
 *区间覆盖问题
 *输入:n个区间,有可能重合,还有一个区间,判断这个区间是不是与这n个区间完全重合
 *输出:true or false
 *步骤:先将n个区间按start进行排序O(nlogn),然后根据这些区间的start和end将这些区间合并成为   *互相不相交的区间O(n),然后判断给定区间是否与这些不相交的区间完全重叠
*/
import java.util.*;
class Interval{
	int start;
	int end;
	public Interval(int start, int end){
		this.start = start;
		this.end = end;
	}
}
public class IntervalOverlap{
	public static void main(String[] args){
		List intervalList = new ArrayList();
		Interval i1 = new Interval(2,3);
		Interval i2 = new Interval(1,2);
		Interval i3 = new Interval(3,9);
		intervalList.add(i1);
		intervalList.add(i2);
		intervalList.add(i3);

		Interval i4 = new Interval(1,6);
		System.out.println(whetherOverlap(intervalList,i4));
	}
	private static boolean whetherOverlap(List intervalList, Interval i){
		Comparator intervalComparator = new Comparator(){
			public int compare(Object o1, Object o2){
				Interval i1 = (Interval)o1;
				Interval i2 = (Interval)o2;
				return i1.start-i2.start;
			}
		};
		Collections.sort(intervalList, intervalComparator);
		for(int j=0;j<intervalList.size()-1;j++){	
			Interval i1 = (Interval)intervalList.get(j);
			Interval i2 = (Interval)intervalList.get(j+1);
			if(i1.end>=i2.start){
				i1.end = i2.end;
				intervalList.remove(j+1);
				j--;
			}
		}
		for(int j=0;j<intervalList.size();j++){
			Interval interval = (Interval)intervalList.get(j);
			if(interval.start<=i.start && interval.end >= i.end)
				return true;
		}
		return false;	
	}
}
分享到:
评论

相关推荐

    实现4-10区间覆盖问题.cpp

    实现4-10区间覆盖问题.cpp

    贪心思想的区间覆盖问题

    情形1:区间完全覆盖问题 情形2:最大不相交区间数问题 情形3:区间选点问题

    区间覆盖问题.sln

    区间覆盖的代码,算法书上的一些杂糅以及自己的想法,上传凑个积分用,如有雷同算我抄你!

    区间覆盖 源代码 以及数据

    区间覆盖的源代码和原始输入数据 希望下载后加一个评论

    最大覆盖问题(问题描述+ 通过代码)

    在区间覆盖问题中,每个元素被表示为一个区间,如[i, j],覆盖意味着选择的区间能包含尽可能多的整数点。例如,如果区间[1, 3]和[2, 5]都被选中,那么所有1到5的整数都被覆盖了。 解题策略: 最大覆盖问题通常可以...

    浅谈信息学竞赛中的区间问题

    这通常与区间覆盖问题相关,可以通过贪心策略或动态规划来解决,寻找最小数量的区间以覆盖所有点。 【带权区间调度、覆盖问题】 如果每个区间有附加权重,问题将变为在满足特定条件下最大化总权重。解决这类问题...

    三类基于贪心算法覆盖问题

    本文主要探讨三类基于贪心算法的区间覆盖问题。 ### 情形1:区间完全覆盖问题 #### 描述 给定一个长度为m的区间和n条线段的起点和终点,目标是求最少使用多少条线段可以将整个区间完全覆盖。 #### 解题步骤 1. 将...

    贪心算法(Greedy Algorithm)

    区间覆盖问题是指,给出 M 个不同的整数,表示 M 个区间,要求画几条线段覆盖住所有的区间,条件是:每条线段可以任意长,但是要求所画线段之和最小,并且线段的数目不超过 N。该问题可以使用贪心算法来解决。算法...

    java 区间

    在处理区间问题时,我们可能会遇到各种情况,如区间排序、区间查询、区间覆盖问题等。这些都可以通过数据结构和算法来解决。例如,可以使用平衡二叉搜索树(如AVL或红黑树)来高效地存储和查询区间。当需要快速查找...

    动态规划类型分析(区间,线性,树形,路径)

    例如,区间覆盖问题、区间最值问题等。这类问题的关键在于识别区间之间的重叠关系,并构造合适的状态转移方程。区间动态规划常采用滚动数组技巧来节省空间。 2. 数网的核(Core)题解 数网问题通常与图论中的网络流...

    百度地图 区间覆盖 多点定位

    在IT行业中,尤其是在地理信息系统(GIS)和移动应用开发领域,"百度地图 区间覆盖 多点定位"是一个重要的概念。这个主题涉及到利用百度地图API实现特定区域内多个点的定位和覆盖,以便进行数据分析、路线规划或者...

    经典的贪心算法,实用加常用

    区间覆盖问题是指,给定 M 个不同的整数,表示 M 个区间,要求画几条线段覆盖住所有的区间,条件是每条线段可以任意长,但是要求所画线段之和最小,并且线段的数目不超过 N。 贪心算法的解决思路是,选择当前看起来...

    ACM基础算法入门讲述PPT学习教案.pptx

    区间覆盖问题则需要找到最少的区间来覆盖指定线段,同样需要对区间进行预处理和排序,以便找到最佳解决方案。 总之,ACM基础算法的学习不仅要求掌握基本概念,还要通过实践理解和运用各种算法模型,提升解决复杂...

    line_map.rar_图论_图论算法

    其中,一个经典的问题是区间覆盖问题,即寻找最少数量的区间来覆盖所有的时间段。另一个问题是区间调度,目的是在满足某些条件(如每个时间段只能分配给一个任务)下,最大化任务的执行数量。 在"第二讲、区间图....

    TQCAI#Algorithm#1288. 删除被覆盖区间1

    1288. 删除被覆盖区间典型的区间覆盖问题# 1. 找到覆盖区间# 2. 找到相交区间,合并# 3. 完全不想交,更新起始点return len(interv

    信息学奥赛试卷

    - 这是一个区间覆盖问题,与图论中的区间调度问题相似。目标是在不重叠的情况下,将街道的格子分配给k个人,使得覆盖的景点美学值之和最大。可以使用贪心算法,按景点美学值降序排列,然后依次分配给考察者,确保每...

    ACM(lecture_07)贪心算法081112

    在ACM程序设计中,贪心算法被用来解决一些具体的问题,例如事件序列问题和区间覆盖问题。在事件序列问题中,给定一组事件,每个事件有开始和结束时间,目标是找到一个最长的事件序列,使得这些事件在时间上不重叠。...

    (lecture_09贪心算法090420

    【贪心算法】是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致...而在区间覆盖问题和Moving Tables问题中,虽然未提供详细证明,但可以通过分析问题特性来推理贪心策略的合理性。

    第1章 贪心算法-2021.10.03.pdf

    - **区间覆盖问题**:寻找最少数量的区间覆盖指定线段[s, t],可以按区间左端点排序,每次选择能覆盖s的右端点最大的区间,以确保最小化区间数量。 在实际编程中,贪心算法通常结合排序算法实现,如示例代码所示,...

    校门外的树1

    这个问题描述的是一个典型的区间覆盖问题,属于算法领域。题目中提到的“校门外的树”是一个经典的编程竞赛题目,旨在考察参赛者对区间操作、集合操作以及数学逻辑的理解和实现能力。 首先,我们需要理解问题的核心...

Global site tag (gtag.js) - Google Analytics