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 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- POJ 1948 Triangular Pastures
题意: 把很多单独的线段重新组合成一个三角形,使得三角形面积最大(所有的线段都必须用上). 思路: 三角形的任意一条边的边长不能超过周长的一半,只需要用dp枚举两条边j,k,剩下的一条边长为tot ...
- Intellij IDEA Debug调试技巧
1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断点 3.使用postman发送http请求 4.请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5.按F8 在 ...
- .NetCore中使用AspectCore、ExceptionLess 实现AOP操作日志记录
结合前面封装的ExceptionLess,接下来使用 AspectCore 实现AOP日志处理 nuget导入AspectCore.Core .AspectCore.Extensions.Depend ...
- Ubuntu 18.04 上设置桌面程序开机自启动
需求 在新安装的 Ubuntu 18.04 系统上,将有些不可描述的程序开机之后自动启动 Startup Applications Preferences 打开 Startup Application ...
- 002.NTP服务端搭建
一 安装及准备 1.1 安装NTP [root@server ~]# yum -y install ntp #也可下载之后rpm安装,或者源码安装 1.2 NTP服务地址 http://www.ntp ...
- Java基础组件快速入门
最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好 ...
- 使用 Python 在 Linux 上实现一键回归测试
从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动 ...
- bzoj1205: [HNOI2005]星际贸易
题目链接 bzoj1205: [HNOI2005]星际贸易 题解 辣鸡题面,毁我青春 辣鸡题面,毁我青 辣鸡题面,毁我 辣鸡题面,毁 第一问,背包dp 第二问 问题转化为在一个序列上经过好多点走到终点 ...
- BZOJ.2882.工艺(后缀自动机 最小表示 map)
题目链接 BZOJ 洛谷 SAM求字符串的最小循环表示. 因为从根节点出发可以得到所有子串,所以每次找字典序最小的一个出边走即可.因为长度问题把原串再拼接在后面一次. 需要用map存转移.复杂度O(n ...
- Loj10154 选课
试题描述: 大学实行学分制.每门课程都有一定的学分,学生只要选修了这门课并通过考核就能获得相应学分.学生最后的学分是他选修各门课的学分总和.每个学生都要选择规定数量的课程.其中有些课程可以直接选修,有 ...