import java.util.ArrayList;
import java.util.Collections;
import java.util.List; /**
* 判断多个时间段是否出现重叠
* @author cavancao
*/
public class TimeSlotUtil { public static boolean checkOverlap(List<String> list){
Collections.sort(list);//排序ASC boolean flag = false;//是否重叠标识
for(int i=0; i<list.size(); i++){
if(i>0){
//跳过第一个时间段不做判断
String[] itime = list.get(i).split("-");
for(int j=0; j<list.size(); j++){
//如果当前遍历的i开始时间小于j中某个时间段的结束时间那么则有重叠,反之没有重叠
//这里比较时需要排除i本身以及i之后的时间段,因为已经排序了所以只比较自己之前(不包括自己)的时间段
if(j==i || j>i){
continue;
} String[] jtime = list.get(j).split("-");
//此处DateUtils.compare为日期比较(返回负数date1小、返回0两数相等、返回正整数date1大)
int compare = DateUtils.compare(
(DateUtils.getDate()+" "+itime[0]+":00"),
(DateUtils.getDate()+" "+jtime[1]+":00"),
"yyyy-MM-dd HH:mm:ss");
if(compare<0){
flag = true;
break;//只要存在一个重叠则可退出内循环
}
}
} //当标识已经认为重叠了则可退出外循环
if(flag){
break;
}
} return flag;
} public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("08:00-09:00");
list.add("09:00-12:00");
list.add("13:00-16:30");
list.add("16:00-17:00");
list.add("18:00-20:00"); boolean flag = checkOverlap(list);
for(String time : list){
System.out.println(time);
} System.out.println("\n当前时间段列表重叠验证结果为:" + flag);
}
}
/*
* TimeSlotUtil.java
* Version 1.0.0
* Created on 2017年12月1日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.dy; import java.util.Arrays; /**
* 判断多个时间段是否出现重叠
* @author cavancao
*/
class Interval {
int start; //起点
int end; //终点 Interval(int a, int b) {
start = a;
end = b;
}
} class Point implements Comparable<Point> {
int value; //数值
int type; //点的类型,0为起点,1为终点 Point(int v, int t) {
value = v;
type = t;
} //实现compareTo函数
@Override
public int compareTo(Point p) {
if (this.value == p.value) {
return 0;
} else if (this.value > p.value) {
return 1;
} else {
return -1;
}
} //区间转换 } public class TimeSlotUtil2 { public int getOverlappingCount(Interval[] A) { int max = 0, count = 1; if (A == null || A.length == 0)
return max; Point[] points = new Point[A.length * 2]; for (int i = 0; i < A.length; i++) { points[2 * i] = new Point(A[i].start, 0); points[2 * i + 1] = new Point(A[i].end, 1); } //Collection.sort(points); Arrays.sort(points); for (int i = 0; i < points.length; i++) { if (points[i].type == 0) { count++; max = Math.max(max, count); } else { count--; } } return max; } public static void main(String[] args) { Interval[] testInterval = new Interval[4];
testInterval[0] = new Interval(1, 5);
testInterval[1] = new Interval(10, 15);
testInterval[2] = new Interval(5, 10);
testInterval[3] = new Interval(20, 30); TimeSlotUtil2 demo = new TimeSlotUtil2();
int max = demo.getOverlappingCount(testInterval); System.out.println(max); }
}

Java判断多个时间段是否重叠(重叠区间个数)的更多相关文章

  1. Java判断一个日期是否在下周日期区间

    Java实现判断一个日期是否在下周日期区间的方法 /** * 判断输入的日期是否在下周区间 * @return * @author nemowang */ public static boolean ...

  2. java 判断两个时间段是不是有交集

    如上图:X Y  Z  分别为传来的开始时间可能位于数据库中时间段的位置. X有三种可能 即传来的开始时间为与数据可中某条数据的开始位置!      这样他的结束时间就有三种可能       1.位于 ...

  3. java 判断两个时间段是否有交集

    /* 开始时间 */ Date leftStartDate = feesPreferential.getPreferentialStartTime(); /* 结束时间 */ Date leftEnd ...

  4. java获取前一天时间SimpleDateFormat,java判断某个时间段

    java获取前一天时间SimpleDateFormat SimpleDateFormat predf = new SimpleDateFormat("yyyy-MM-dd"); D ...

  5. ACdream 1430——SETI——————【后缀数组,不重叠重复子串个数】

    SETI Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statist ...

  6. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  7. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  8. Java 判断操作系统类型(适用于各种操作系统)

    Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...

  9. java判断字符串是否为空的方法总结

    http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...

随机推荐

  1. BCTF2017 BabyUse

    BCTF2017 BabyUse 问题 问题在于drop函数中在释放块之后没有清空bss_gun_list中的指针. 一般因为存在对bss_gun_flag的验证,所以不会出现什么问题,但是在use功 ...

  2. react + redux 完整的项目,同时写一下个人感悟

    先附上项目源码地址和原文章地址:https://github.com/bailicangd... 做React需要会什么? react的功能其实很单一,主要负责渲染的功能,现有的框架,比如angula ...

  3. HDU4267 树状数组

    题意描述: 给定一个数组,有两种操作: 操作一:a b k c 对于区间a~b之间的元素如果下标满足(i-a)%k=0则给元素i加上c 操作二:a          查询下标为a的元素当前值 解题思路 ...

  4. 模拟赛T1 素数

    没有链接 描述: 给p,q,求a^2+b^2 = p*q解的个数,p,q是素数 沙雕打表结论题 然后怼了3h吼爆零 题解 首先这是个结论题 然后这是证明 代码 #include <stdio.h ...

  5. [USACO08NOV]Time Management

    [USACO08NOV]Time Management 题目大意: 有\(n(n\le1000)\)个任务,同一时间只能进行一个任务.每个任务有一个进行时间\(t_i\)和一个截止时间\(s_i\), ...

  6. 深入理解指针—>结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  7. tomcat 启动 关闭 重启脚本

    启动 #!/bin/bash # Author:wanglan # Mail:@qq.com # Fuction:Tomcat Start/stop/restart script # Version: ...

  8. Codeforces Round #272 (Div. 2) D. Dreamoon and Sets 构造

    D. Dreamoon and Sets 题目连接: http://www.codeforces.com/contest/476/problem/D Description Dreamoon like ...

  9. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem B. Travelling Camera Problem set贪心

    Problem B. Travelling Camera Problem 题目连接: http://www.codeforces.com/gym/100253 Description Programm ...

  10. C# 读取CSV和EXCEL文件示例

    我们习惯了直接连到数据库上面读取数据表的数据内容: 如果有一天我们需要读取CSV,EXCEL文件的内容的时候,可不可以也像读数据表的方式一样呢?当然可以,使用OleDB ADO.NET是很简单的事情 ...