所以我有一项任务。我已经给出了n个数字和m个间隔,我需要弄清楚第m个间隔中有多少个数字。我编写了一些复杂度为O(n * m)的代码,但我需要对其进行更优化。有帮助吗? 代码:
a.reduce((acc, item) => {
acc[item.id] = item;
return acc;
}, {})
}
答案 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))。