给定两个日期范围,确定两个日期范围是否重叠的最简单或最有效的方法是什么?
举个例子,假设我们有通过日期时间变量表示的范围StartDate1来EndDate1 和 StartDate2到EndDate2.
我有一组范围可能看起来像这样:
[(0, 100), (150, 220), (500, 1000)]
Run Code Online (Sandbox Code Playgroud)
然后我会添加一个范围,比如说(250, 400),列表看起来像这样:
[(0, 100), (150, 220), (250, 400), (500, 1000)]
Run Code Online (Sandbox Code Playgroud)
然后我会尝试添加范围(399, 450),它会因为重叠而出错(250, 400).
当我添加新范围时,我需要搜索以确保新范围不与现有范围重叠.并且列表中的任何范围都不会与列表中的另一个范围重叠.
为此,我想要一个以排序顺序廉价维护其元素的数据结构,并且很快允许我在给定元素之前或之后找到该元素.
有没有更好的方法来解决这个问题?是否有像Python中可用的数据结构?我知道该bisect模块存在,这可能是我将使用的.但我希望有更好的东西.
编辑:我使用bisect模块解决了这个问题.这是代码的链接.这有点长,所以我不会在这里发布:
我有一些这样的数据:
1: 2 - 10
2: 3 - 15
3: 4 - 9
4: 8 - 14
5: 7 - 13
6: 5 - 10
7: 11 - 15
Run Code Online (Sandbox Code Playgroud)
我将尝试表示使其更清晰:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 |--------------------------------------X---------|
2 |--------------------------------X--------------------------------------------|
3 |--------------------------X---|
4 |-X-------------------------------------|
5 |--------X------------------------------|
6 |--------------------X----------|
7 |---------------------------|
Run Code Online (Sandbox Code Playgroud)
因此,在示例情况下,8-9如果使用第二个方案是关键期,因为所有点都是活动的.在python中解决这个问题的快速而好的方法是什么?我正在考虑使用动态编程,但还有其他建议的方法吗?
我的方法直到现在:
我从实时的角度思考更多.因此,每当我得到一个新的点,我这样做:假设我已经得到了2-10然后我得到3-15了最大的开始和结束的最小值所以这种情况它是3-10并将此间隔的计数增加到2.然后第三点进来4-9接送最大是4和min为9并更新值3-10到4-9时和更新计数到3.现在8-14进来,我选择这个间隔的开始是大于4-9和该间隔的结束小于 …
我有一个表,每行存储一个开始日期/时间和结束日期/时间的会议.
meetingID int
meetingStart datetime
meetingEnd datetime
期望的输出:对于每对重叠的行,我想输出
meetingID,meetingStart,meetingID,meetingEnd
在MySQL中执行此类查询的最有效方法是什么?
找出两个数字范围是否相交的最佳方法是什么?
我的号码范围是3023-7430,现在我想测试以下哪个数字范围与它相交:<3000,3000-6000,6000-8000,8000-10000,> 10000.答案应该是3000-6000和6000-8000.
在任何编程语言中执行此操作的好的,有效的数学方法是什么?
我今天接受了采访,并被要求检查两次会面是否相互冲突.每次会议都有开始时间和结束时间.我试图回答这个问题但不是那个具体的问题.有人可以提出一些想法吗?
bool IsConflict(Datetime s1, Datetime e1, Datetime s2, Datetime e2)
Run Code Online (Sandbox Code Playgroud)
如果存在冲突,则应返回true;如果没有冲突,则返回false.
例如
如果:
(s1,e1)= 8,10 则为真
(s2,e2)= 9,11
(s1,e1)= 7,10
(s2,e2)= 8,9
(s1,e1)= 8,11
(s2,e2)= 9,11等
我想从一个表中提取行,该表的间隔与查询中指定的间隔相交.假设我有一个简单的ID, DATE_START, DATE_END桌子,两个查询参数P_DATE_START和P_DATE_END,什么是表达的查询,使我找到其中的所有行的最简单的方法[DATE_START, DATE_END]至少有一个共同的元素用[P_DATE_START, P_DATE_END]?
更新:
为了使预期结果更清晰,请在下面找到输入值和预期结果的列表.Colums是 DATE_START, DATE_END, P_DATE_START, P_DATE_END, MATCH.
16, 17, 15, 18, YES
15, 18, 16, 17, YES
15, 17, 16, 18, YES
16, 18, 15, 17, YES
16, 17, 18, 19, NO
18, 19, 16, 17, NO
Run Code Online (Sandbox Code Playgroud) 我在页面上设置了几个HTML块,如:
<p class="something">
<a href="http://example.com/9999">text 1 2 3</a>
<a href="http://example.com/2346saasdf">text 3 4 5</a>
(9999)
<a href="http://example.com/sad3ws">text 5 6 7random</a>
</p>
Run Code Online (Sandbox Code Playgroud)
我想用它们得到括号中的数字.我不得不承认我以前从未真正使用过正则表达式 - 阅读它,看过它的例子但是我自己没有使用它.无论如何,我创造了这个有点环顾四周:
<p class="something">(.*?)</p>
这正确地得到整个<p>块,但是,我只想要(9999)(括号完整).我真的不确定如何得到它.
假设页面上的其他元素也可能在括号中有数字(但它们不会包含在这种格式中),并且HTML将保持有效且一致,我该如何获取它?
我知道这对于之前使用过正则表达式的人来说可能很容易,但对于解决方案,我会欣赏每个角色捕获的细节,以便我可以从中学习.