php - 使用开始和结束日期/时间计算事件数的算法

标签 php algorithm count

我有一组具有开始和结束时间的事件。我想生成一组时间和事件数,当时值会发生变化以创建图形。截至目前,我正在通过开始和结束时间的多次迭代来计算该值。还有其他办法吗?

例如

Event 1: Jan 1 to Jan 10
Event 2: Jan 6 to Feb 6
Event 3: jan 8 to Feb 1

我应该得到一个像这样的数组

Jan 1: 1
Jan 6: 2
Jan 8: 3
Jan 11: 2
Feb 2: 1
Feb 7: 0

最佳答案

创建一个包含所有开始和结束时间的数组,以及事件是在该日期开始 (1) 还是结束 (-1) 的信息:

[(Jan 1 , 1), (Jan 10, -1), (Jan 6, 1), (Feb 6, -1), (Jan 8, 1), (Feb 1, -1)]

按日期排序数组:

[(Jan 1 , 1), (Jan 6, 1), (Jan 8, 1), (Jan 10, -1), (Feb 1, -1), (Feb 6, -1)]

遍历数组,保留一个计数器并根据需要将日期添加到数组中。您可能希望将多次出现的同一日期合并到一个条目中。

(这不是O(n),但我认为目标是比原来的O(n²)更好。)

关于php - 使用开始和结束日期/时间计算事件数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300949/

相关文章:

mysql - 使用 Count 或 Sum 在 MYSQL 中加入

r - 用 r 计算 df 列中的出现次数

php - array_intersect 可变数量的数组

php - 如何用多表的SUM和MINUS按COUNT排序

python - 使用 3 个常量查找所有可能的排列

c - 我正在编写一个关于更改制作的蛮力算法,但我有点卡住了

php - #1193 - 尝试登录 phpmyadmin 时出现未知系统变量 'lc_messages'

php - 在 UWP 应用中使用 Php 脚本从 MySql 服务器获取数据

c - 遍历不断变化的事件列表

mysql - 如何使用 WHERE 语句和 COUNT(*) = 1 选择行