Java判断多个时间段是否重叠(重叠区间个数)
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判断多个时间段是否重叠(重叠区间个数)的更多相关文章
- Java判断一个日期是否在下周日期区间
Java实现判断一个日期是否在下周日期区间的方法 /** * 判断输入的日期是否在下周区间 * @return * @author nemowang */ public static boolean ...
- java 判断两个时间段是不是有交集
如上图:X Y Z 分别为传来的开始时间可能位于数据库中时间段的位置. X有三种可能 即传来的开始时间为与数据可中某条数据的开始位置! 这样他的结束时间就有三种可能 1.位于 ...
- java 判断两个时间段是否有交集
/* 开始时间 */ Date leftStartDate = feesPreferential.getPreferentialStartTime(); /* 结束时间 */ Date leftEnd ...
- java获取前一天时间SimpleDateFormat,java判断某个时间段
java获取前一天时间SimpleDateFormat SimpleDateFormat predf = new SimpleDateFormat("yyyy-MM-dd"); D ...
- ACdream 1430——SETI——————【后缀数组,不重叠重复子串个数】
SETI Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statist ...
- 使用Java判断字符串中的中文字符数量
Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- Java 判断操作系统类型(适用于各种操作系统)
Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...
- java判断字符串是否为空的方法总结
http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- c run-time library 和 standard c++ library
参考: c run-time libraries: http://msdn.microsoft.com/zh-cn/library/vstudio/abx4dbyh(v=vs.100).aspx H ...
- Zookeeper+Curator 分布式锁
本来想着基于zk临时节点,实现一下分布式锁,结果发现有curator框架.PS:原声API真的难用,连递归创建path都没有? 配置curator maven的时候,md配置了好几个小时,最后发现集中 ...
- 第一届CCF软件能力认证
1.相反数 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数). 输入格式 第一行包含一个正整数 N.(1 ≤ N ≤ 500). 第二行为 ...
- 【PAT】1020 Tree Traversals (25)(25 分)
1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...
- CSS 浮动和清除
CSS 浮动和清除浮动 在写页面布局的过程中,浮动是大家经常用的属性.在好多的排版布局中都是用的的浮动比如说下面这些地方都是应用到了浮动. 在我学习浮动的时候可是熬坏了脑筋,在这里我分享一下我对浮动这 ...
- C语言中的 *p[2] 与 (*p)[2] 的截然不同
C语言运算符优先级表(由上至下, 优先级依次递减) 运算符 结合性 () [] -> . 自左向右 ! ~ ++ -- - (type) * & sizeof 自 ...
- Android对Sqlite数据库的增删改查
SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...
- 一个关于react-native的demo,详细请转GitHub
react native 0 介绍 支持ios和android两个平台 下载:git clone https://github.com/chunlei36/react-native-full-exam ...
- 前端代码控制gif图暂停与播放的坑
废话不说,先看效果..... 方案一.方案二效果: 方案三效果: <!DOCTYPE html> <html> <head> <meta charse ...
- queue模块回顾
queue queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时 ...