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 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- activiti流程跟踪图算法
流程跟踪图-推导算法 工作中使用activiti实现流程图相关业务,但是上线后遇到问题,偶尔流程图出不来.查阅了一下画流程图的实现,基本上是参见:activiti-流程图颜色变化之一篇. 核心类,参见 ...
- SNMP中MIB2所有主要节点
系统组:system组包含以下对象集(.1.3.6.1.2.1.1): 对象名:sysDescr(1) OID:system.1 对象类型:DisplayString[255] 访问模式:只读 描述: ...
- opencv的级联分类器(mac)
级联分类器的介绍:级联分类器训练 因为要训练负样本,windows电脑有些问题,所以就只能有mac进行训练. 在windows中训练,准备了负样本之后,进行三步. 1.opencv_createsam ...
- 2018-2019-2 网络对抗技术 20165301 Exp1 PC平台逆向破解
任务一 直接修改程序机器指令,改变程序执行流程 1.输入指令objdump -d pwn5301 | more反汇编pwn1文件. 通过反汇编,可以看到main函数中的call 804891,其机器码 ...
- Fiddler 常用功能总结
1.fiddler相关配置 2.如何抓包 移动端 ①保持手机和电脑处于同一网络中 ②设置手机的代理为电脑当前所处网络的IP,端口号为:8888,eg:10.12.1.64:8888. ③ 启动ap ...
- 如何用node.js批量给图片加水印
上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...
- 005.iSCSI客户端配置示例-Windows
一 环境 Linux作为iSCSI服务端,Windows2008R2作为iSCSI客户端 二 服务端配置过程 2.1 客户端配置 在Linux上参照之前的配置建立三个LUN卷作为共享盘,最终配置如下: ...
- 大数据小视角4:小议Lambda 与 Kappa 架构,不可变数据的计算探索
这个系列文章之前因为私事荒废了很久,继续更新--之前与老大谈论架构时,老大和我聊了聊分布式数据处理之中的Lambda结构,之前在<Designing Data-Intensive Applica ...
- TokenAutication源码分析
创建的token如何交给前端进行使用呢? 在官方文档说明中,将产生的這个token放在header中 TokenAutication认证原理 用户认证成功以后,会在服务端产生一个Token.并且服务端 ...
- POJ.1379.Run Away(模拟退火)
题目链接 POJ输出不能用%lf! mmp从4:30改到6:00,把4:30交的一改输出也过了. 于是就有了两份代码.. //392K 500MS //用两点构成的矩形更新,就不需要管边界了 #inc ...