找到批次是多个间隔的最快方法

时间:2018-01-04 12:27:47

标签: c++ algorithm sorting

所以我有一项任务。我已经给出了n个数字和m个间隔,我需要弄清楚第m个间隔中有多少个数字。我编写了一些复杂度为O(n * m)的代码,但我需要对其进行更优化。有帮助吗? 代码:

a.reduce((acc, item) => {
   acc[item.id] = item;
   return acc;
}, {})

}

1 个答案:

答案 0 :(得分:0)

正如DAle已经指出的那样。

您可以先对n个数字进行排序。一个好的算法,比如合并或堆排序,会给你一个复杂度O(n * log(n))。

之后,你需要使用搜索算法来同时使用'第一个'和第二个'每个间隔的部分。根据算法,复杂性应该在O(log(n))附近 - std :: lower_bound在处理排序数据时具有O(log(n))的复杂度,因此它足够好。或者对于所有区间都是O(m * log(n))。

比较搜索结果将为您提供每个间隔中的数字量。

总的来说,你会有大约O((m + n)* log(n))。