- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
标题不是很好,我愿意接受建议。
这是我的基本问题:
我有一组约会,每个约会都有开始时间和结束时间。
鉴于该集合,我想要的是一组新的范围 [ start_time, end_time ]
,适用于 n
重叠约会的所有时间段。
因此,例如,给定集合(为了便于阅读,时间戳简化为小数字)
[
[ 1, 3 ],
[ 2, 4 ],
[ 2, 4 ],
[ 5, 7 ],
[ 6, 8 ],
[ 7, 8 ]
]
...假设我想要所有范围内至少有 3 个不同的约会,结果应该是
[
[ 2, 3 ],
[ 6, 7 ]
]
为了让它不那么抽象......
想象一下,我运行一个 24 小时窗口着色服务,始终有 3 名安装人员在岗。在我的网站上,我想显示所有可用的安装时间。所以我需要隐藏我已经安排了 3 个约会的任何时间范围。
不一定要求任何人编写代码 - 但如果有人可以为我指出此类问题的知名算法,我将不胜感激。
谢谢。
[编辑] 添加了 javascript 标签,因为我将在 Node 中实现它,但答案不需要在 JS 中。
[编辑 2] 我正在寻找一个非常通用的解决方案,所以假设约会可以随时开始(未标准化为一小时或 30 分钟)并且可以持续任何时间
最佳答案
我认为从输入范围创建直方图,然后遍历直方图定位范围,其中高度大于或等于目标重叠,在本例中为 3。
顺便说一句,根据您的输入,我认为 [6,7] 不是有效范围 - 我认为它应该是 [7,7]。至少那是我的代码产生的:)
下面是一些 Java 代码来说明:
public static void main(String[] args)
{
int[][] ranges = {{1,3},{2,4},{2,4},{5,7},{6,8},{7,8}};
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(int[] range : ranges)
{
min = Math.min(min, range[0]);
max = Math.max(max, range[1]);
}
int[] hist = new int[1+max-min];
for(int[] range : ranges)
for(int i=range[0]; i<=range[1]; i++) hist[i-min]++;
int overlap = 3;
for(int i=0; i<hist.length; i++)
{
int j = i;
while(i<hist.length && hist[i] >= overlap) {i++;}
if(i>j)
System.out.println((j+min) + " : " + (i+min-1));
}
}
输出:
2 : 3
7 : 7
编辑
我对直方图方法不满意,因为它依赖于整数范围并且对于长范围来说效率低下。在我看来,您可以改为对范围端点进行排序,跟踪它们是在范围的开始还是结束,然后遍历端点以保持事件范围的计数器(遇到开始时递增,遇到开始时递减遇到一个尽头)。当计数器首次升至高于或低于您的阈值时,在您的情况 3 中,您将输出范围。
我现在看到 MBo 建议采用相同的方法。
这里还有一些代码来说明:
static class RangeEnd
{
int time;
int delta;
public RangeEnd(int pos, int delta)
{
this.time = pos;
this.delta = delta;
}
}
public static void main(String[] args)
{
int[][] ranges = {{ 1,3},{2,4},{2,4},{5,7},{6,8},{7,8}};
RangeEnd[] ends = new RangeEnd[2*ranges.length];
int i=0;
for(int[] range : ranges)
{
ends[i++] = new RangeEnd(range[0], 1);
ends[i++] = new RangeEnd(range[1], -1);
}
Arrays.sort(ends, new Comparator<RangeEnd>()
{
@Override
public int compare(RangeEnd e1, RangeEnd e2)
{
if(e1.time < e2.time) return -1;
else if(e1.time > e2.time) return 1;
else if (e1.delta > e2.delta) return -1;
else return 1;
}
});
int overlap = 3;
int count = 0;
boolean active = false;
int start = 0;
for(RangeEnd end : ends)
{
count += end.delta;
if(count >= overlap)
{
if(!active)
{
start = end.time;
active = true;
}
}
else if(active)
{
System.out.println(start + " : " + end.time);
active = false;
}
}
}
关于javascript - 从一组约会中获取重叠时间范围的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972684/
我有一个跟踪到期日期的电子表格(excel 2003),我想知道是否有办法让这些到期日期在 Outlook 中创建约会(提醒)。到期日期位于电子表格的一个字段中,实体名称位于另一列中。理想情况下,我希
我搜索文档,但找不到获取今天日期的函数。我可能错过了一些相当明显的东西。 我只需要类似的东西 julia> today() 2014-06-25 julia> string(today()) "201
我需要将开始/结束时间下拉列表中的项目更改为相隔 5 分钟。似乎没有简单的方法来设置它,所以我正在尝试 VBA。 我可以让检查员在打开预约表格时进行检查: If Inspector.CurrentIt
我正在尝试获取共享日历的所有项目(我已关注 Glen Scales 的 EWS - Access All Shared Calendars),但它仅在“共享日历”(法语中的“Calendriers p
我需要当前约会。如果当前没有约会,则下一个甚至上一个约会。 我打算使用 Restrict 来限制约会集,然后根据 restrict 参数选择第一个或最后一个约会(例如,限制在当前时间之后结束的约会,或
我对 Python 还很陌生 - 所以请友善:)我有一个带有日期列的数据框。我使用 从 TXT 文件导入它 df1 = pd.read_csv('FileName.TXT', low_memory=F
已经创建了一个 outlook 约会做这样的事情; Microsoft.Office.Interop.Outlook.Application app = null; Microsoft.Offic
我编写了这段代码来查找指定时间范围内指定类别的所有约会的总持续时间: private readonly MAPIFolder _timing; private int CalculateTotalDu
Appointment.Id 属性或 Appointment.Id.UniqueId 真的是唯一的吗? 我有最简单的方法,使用 ExchangeService.FindAppointments 检索约
我必须调用或处理以更新日历中现有事件(我单击的事件)的事件或方法名称是什么。完整日历可以在这里找到http://arshaw.com/fullcalendar/ 最佳答案 初始化 FullCalend
我制定了一个如下所示的自定义时间表并且它有效但现在我正在尝试添加事件/约会并且我无法弄清楚我的生活如何做到这一点。我希望能够单击日历上的其中一个按钮(日期),创建约会/事件,然后将事件的标题添加到为正
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我有一个 iOS 应用程序,我需要能够从 Exchange 用户那里获取所有约会。任何人都可以指出我在这方面的好方向吗?这似乎是可能的,因为 iPhone 和其他应用程序/Outlook 可以做到这一
我正在尝试使用 Python win32com 库从 outlook(2013) 获取事件,我已经设法做到了这一点,但是我无法获得它们的状态(已接受、暂定、已拒绝)。当我当前的代码获取所有事件时,了解
我想读取某个日期之间某个用户的所有约会。并从他们那里获取有关内容、从何时到何时、它的颜色(类别)、如果不在办公室的话状态的信息。我没有找到有效的样本。你能给我看一个示例吗? 我使用的是 MS 的 wi
这里是 Java 8/Groovy 2.4.3/2015 A.D.。我需要编写一个将安装在台式机/笔记本电脑上的 Swing 应用程序,我想知道现代 Swing 应用程序开发人员在以下方面是什么样的:
我是 Ruby 的新手,正在尝试弄清楚为什么以下内容无法按预期工作: 2.2.1 :010 > user_date = Date.today => Sun, 31 May 2015 2.2.1 :0
我正在尝试添加 Appointments到我的 UWP 应用。 我已成功设置约会,但创建的约会 ID 结果为空,这意味着约会未创建。 以下是我的代码: public static Re
我目前正在开发一个利用 Microsoft Exchange WebServices 的应用程序,我对 Appointment.IsRecurring 属性和 Appointment.Appointm
想想看,我在使用 IE 时遇到了问题,希望有人能够提供帮助......我有一个网站,访问者可以在该网站上报名参加特定的 session ,然后我希望能够为他们选择的日历生成约会;选项包括 Gmail、
我是一名优秀的程序员,十分优秀!