1

我正在用 Express 构建一个调度应用程序。我有一个显示月历的日历视图。

每天必须完全覆盖;无论轮班是否重叠,必须始终至少有一个人在轮班。

给定一天的一系列班次,看起来像这样

{
    start: [javascript Date],
    end: [javascript Date],
    name: "James Bond",
    ...
}

如果需要更多班次来填充它,我想有条件地添加一个 CSS 类来突出显示这一天。

x判断和之间的时间y是否完全填满的最佳方法是什么?

4

1 回答 1

2

您需要展示您尝试过的内容,但我将为您提供解决此问题的两种基本方法的伪代码。

无论采用哪种方法,请确保您在轮班中使用半开间隔。这有几种不同的表示方式:

// interval notation:
[start, end)

// algebraicly
start <= value < end

// javascript and other code
start <= value && end > value 

方法#1

  • 在每个日期上使用Date.getTime()以获得每个日期的简单数字表示。
  • 找到一个实现区间树的库。
  • 将所有班次映射到树上。
  • 展平/合并树。
  • 寻找差距。

方法#2

  • 初始化一个计数器i = 0
  • 初始化字典或键/值对列表。
  • 对于列表中的每个班次:
    • 如果您的开始日期x在班次中,则递增i.
    • 查看开始时间是否在字典中。
      • 如果没有,添加它,键是开始日期时间,值是1.
      • 如果它已经在字典中,则增加该值。
    • 查看结束时间是否在字典中。
      • 如果没有,添加它,键是开始日期时间,值是-1.
      • 如果它已经在字典中,则减少该值。
  • 按日期时间键对字典进行排序。
  • 查字典,从x.
    • i应该从当前工作的人数开始。
    • 将每个字典项的值添加到您的计数器i
    • 如果i == 0那么没有人在工作。返回 false 或错误。
    • 如果您遵循逻辑,那么i永远不应该是负面的。如果是错误。
    • 继续,直到y到达结束日期。
于 2013-07-27T23:57:12.157 回答