以下是问题:
我们有n个任务需要在n天内完成。每天我们只能完成一个任务。每个任务都有一个开始日期和结束日期。我们不能在开始日期之前开始任务,也必须在结束日期之前完成任务。因此,给定一个开始日期向量s
和一个结束日期向量e
,如果存在向量d
,其中d[i]
是你完成任务i
的日期。例如:
s = {1, 0, 1, 2, 0}
e = {2, 4, 2, 3, 1}
+--------+------------+----------+
| Task # | Start Date | End Date |
+--------+------------+----------+
| 0 | 1 | 2 |
| 1 | 0 | 4 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 0 | 1 |
+--------+------------+----------+
我们有一个可能的解决方案:
d = {1, 4, 2, 3, 0}
+--------+----------------+
| Task # | Date Completed |
+--------+----------------+
| 0 | 1 |
| 1 | 4 |
| 2 | 2 |
| 3 | 3 |
| 4 | 0 |
+--------+----------------+
创建一个O(n^2)时间复杂度的算法很容易。创建一个O(nlogn)时间复杂度的算法也不算太糟糕。据说有一种算法可以在O(n)时间内得出解决方案。那是什么算法呢?
s=[0,0,0,0,0]
和e=[0,3,1,4,2]
。显然,唯一的调度方式是完成最快结束的任务。但我能想到的唯一方法是对它们进行排序,这是O(nlogn)的。您在哪里读到这个问题可以在O(n)内解决?输入向量是否已经排序? - woojoo666