给定一个源区间[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
情形1:区间完全覆盖问题 情形2:最大不相交区间数问题 情形3:区间选点问题
区间覆盖的代码,算法书上的一些杂糅以及自己的想法,上传凑个积分用,如有雷同算我抄你!
区间覆盖的源代码和原始输入数据 希望下载后加一个评论
在区间覆盖问题中,每个元素被表示为一个区间,如[i, j],覆盖意味着选择的区间能包含尽可能多的整数点。例如,如果区间[1, 3]和[2, 5]都被选中,那么所有1到5的整数都被覆盖了。 解题策略: 最大覆盖问题通常可以...
这通常与区间覆盖问题相关,可以通过贪心策略或动态规划来解决,寻找最小数量的区间以覆盖所有点。 【带权区间调度、覆盖问题】 如果每个区间有附加权重,问题将变为在满足特定条件下最大化总权重。解决这类问题...
本文主要探讨三类基于贪心算法的区间覆盖问题。 ### 情形1:区间完全覆盖问题 #### 描述 给定一个长度为m的区间和n条线段的起点和终点,目标是求最少使用多少条线段可以将整个区间完全覆盖。 #### 解题步骤 1. 将...
区间覆盖问题是指,给出 M 个不同的整数,表示 M 个区间,要求画几条线段覆盖住所有的区间,条件是:每条线段可以任意长,但是要求所画线段之和最小,并且线段的数目不超过 N。该问题可以使用贪心算法来解决。算法...
在处理区间问题时,我们可能会遇到各种情况,如区间排序、区间查询、区间覆盖问题等。这些都可以通过数据结构和算法来解决。例如,可以使用平衡二叉搜索树(如AVL或红黑树)来高效地存储和查询区间。当需要快速查找...
例如,区间覆盖问题、区间最值问题等。这类问题的关键在于识别区间之间的重叠关系,并构造合适的状态转移方程。区间动态规划常采用滚动数组技巧来节省空间。 2. 数网的核(Core)题解 数网问题通常与图论中的网络流...
在IT行业中,尤其是在地理信息系统(GIS)和移动应用开发领域,"百度地图 区间覆盖 多点定位"是一个重要的概念。这个主题涉及到利用百度地图API实现特定区域内多个点的定位和覆盖,以便进行数据分析、路线规划或者...
区间覆盖问题是指,给定 M 个不同的整数,表示 M 个区间,要求画几条线段覆盖住所有的区间,条件是每条线段可以任意长,但是要求所画线段之和最小,并且线段的数目不超过 N。 贪心算法的解决思路是,选择当前看起来...
区间覆盖问题则需要找到最少的区间来覆盖指定线段,同样需要对区间进行预处理和排序,以便找到最佳解决方案。 总之,ACM基础算法的学习不仅要求掌握基本概念,还要通过实践理解和运用各种算法模型,提升解决复杂...
其中,一个经典的问题是区间覆盖问题,即寻找最少数量的区间来覆盖所有的时间段。另一个问题是区间调度,目的是在满足某些条件(如每个时间段只能分配给一个任务)下,最大化任务的执行数量。 在"第二讲、区间图....
1288. 删除被覆盖区间典型的区间覆盖问题# 1. 找到覆盖区间# 2. 找到相交区间,合并# 3. 完全不想交,更新起始点return len(interv
- 这是一个区间覆盖问题,与图论中的区间调度问题相似。目标是在不重叠的情况下,将街道的格子分配给k个人,使得覆盖的景点美学值之和最大。可以使用贪心算法,按景点美学值降序排列,然后依次分配给考察者,确保每...
在ACM程序设计中,贪心算法被用来解决一些具体的问题,例如事件序列问题和区间覆盖问题。在事件序列问题中,给定一组事件,每个事件有开始和结束时间,目标是找到一个最长的事件序列,使得这些事件在时间上不重叠。...
【贪心算法】是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致...而在区间覆盖问题和Moving Tables问题中,虽然未提供详细证明,但可以通过分析问题特性来推理贪心策略的合理性。
- **区间覆盖问题**:寻找最少数量的区间覆盖指定线段[s, t],可以按区间左端点排序,每次选择能覆盖s的右端点最大的区间,以确保最小化区间数量。 在实际编程中,贪心算法通常结合排序算法实现,如示例代码所示,...
这个问题描述的是一个典型的区间覆盖问题,属于算法领域。题目中提到的“校门外的树”是一个经典的编程竞赛题目,旨在考察参赛者对区间操作、集合操作以及数学逻辑的理解和实现能力。 首先,我们需要理解问题的核心...