【发布时间】:2021-11-26 01:48:49
【问题描述】:
我有 2 个数组(txs 和间隔),我希望间隔包括日期介于 from 和 to(包括)之间的 txs。
const txs = [
{ price: 1, date: 1 },
{ price: 3, date: 2 },
{ price: 1.7, date: 4 }
];
const interval = [
{ from: 1, to: 2, txs: [] },
{ from: 2, to: 3, txs: [] },
{ from: 3, to: 4, txs: [] }
];
预期结果
[
{ from: 1, to: 2, txs: [{ price: 1 }, { price: 3 }] },
{ from: 2, to: 3, txs: [{ price: 3 }] },
{ from: 3, to: 4, txs: [{ price: 1.7 }] }
]
这是我在 O(n^2) 中的解决方案
for (let i of interval) {
for (let j of txs) {
if (j.date >= i.from && j.date <= i.to) {
i.txs.push({ price: j.price });
}
}
}
这只是一个例子。真正的一个 txs 和间隔可能有超过 10,000 个元素。 有没有可以在 O(n) 或 O(n log n) 中完成的解决方案?
【问题讨论】:
-
在
interval的元素数量和txs的元素数量上这不是O(n)吗? -
@Frederik 这只是一个例子。真正的一个 txs 和间隔可能有超过 10,000 个元素。
-
您可以通过对
txs数组进行排序进行优化,并在嵌套循环中进行二进制搜索而不是迭代。然后你得到n + log(n),它比n^2略好。 -
如果区间数组有不同的区间值,可以删除所有推送的txs数组元素。因此,“for (let j of txs)”的迭代次数低于 start
标签: javascript algorithm big-o