Java 给定时间段内重叠间隔的最大范围

Java 给定时间段内重叠间隔的最大范围,java,algorithm,sorting,search,intervals,Java,Algorithm,Sorting,Search,Intervals,问题陈述 输入:一组间隔开始时间和结束时间以及每30分钟每个元素的强度 例如: {00:00,01:30,5} {01:00,02:30,10} {00:30,02:30,2} {01:00,04:00,3} 输出:最大重叠30分钟周期和重叠元素的强度总和 对于上述输入,输出应为01:00-01:30,此处的强度-20强度为直接和,因为所有元素已完全参与最大重叠30分钟,它可能会随着最大间隔内的参与时间而变化 简单地说,应找到最大重叠30分钟,以及该期间参与元素的附加强度 可以看到不同的线程响应

问题陈述

输入:一组间隔开始时间和结束时间以及每30分钟每个元素的强度

例如:

{00:00,01:30,5}

{01:00,02:30,10}

{00:30,02:30,2}

{01:00,04:00,3}

输出:最大重叠30分钟周期和重叠元素的强度总和

对于上述输入,输出应为01:00-01:30,此处的强度-20强度为直接和,因为所有元素已完全参与最大重叠30分钟,它可能会随着最大间隔内的参与时间而变化

简单地说,应找到最大重叠30分钟,以及该期间参与元素的附加强度

可以看到不同的线程响应最大重叠点和间隔,但无法找到上述问题的解决方案


任何建议都会有帮助

算法如下:

定义所有起点的起点最小值和所有终点的终点最大值以查找范围 将范围划分为30分钟的子间隔 计算每个子间隔的总强度 找到具有最大计算强度的子间隔。 为简洁起见,使用Java 8 Stream API和自定义类开始点和结束点在几分钟内实现,无需解析HH:MM字符串,示例实现如下:

公共课间隙加强{ private final int start;//包含 私有final int end;//独占 私人最终综合实力; 公共间隔提示开始、结束、结束{ this.start=start; this.end=end; 力量=力量; } public int getStart{return start;} public int getEnd{return end;} public int getStrength{return strength;} 公共字符串toString{ 返回字符串。格式[%02d:%02d,%02d:%02d]-%d, 开始/60,开始%60,结束/60,结束%60,强度; } } 导入java.util.*; 导入java.util.stream.*; 公共班机{ 私人静态最终整数半小时=30; 公共静态字符串参数[]{ List data=Arrays.asList 新间隔强度0、90、5、, 新间隔强度60、150、10、, 新间隔强度30、150、2、, 新间隔强度60、240、3 ; int start=data.stream.maptoIntentIntervalsStrength::getStart.min.getAsInt; int end=data.stream.maptointernitervalStrength::getEnd.max.getAsInt; System.out.printlnstart+,+end; 间隔强度最强=IntStream .iteratestart,t->t<结束-半小时,t->t+半小时 .mapToObjt->新建间隔强度//创建子间隔 t、 t+半小时,//子间隔的开始和结束 data.stream//查找重叠 .filterd->d.getStart=t+半小时 .MapToIntentIntervalsStrength::getStrength .sum//计算强度总和 //求子区间的最大强度 .maxComparator.ComparingInterValsStrength::getStrength .get;//检索子间隔 System.out.println; } } 输出:

0, 240
[01:00, 01:30] - 20
无流程实施可如下所示:

公共静态IntervalStrength查找SubIntervalMaxStrength列表数据{ int start=Integer.MAX\u值,end=Integer.MIN\u值; 对于间隔强度间隔:数据{ 如果interval.getStartend end=interval.getEnd; } System.out.printlnstart+,+end; int最大强度=0; int maxIntervalStart=开始;
对于int t=start;t,是否要最大化整个时间间隔内的强度总和?它类似于“请为我编写代码”请求。此类请求在堆栈溢出时不受欢迎,也不受欢迎。