数组格式如下
const arr1 = [
...
[1000, 7000], // arr2需要如果满足下标便加1 [开始下标, 结束下标]
[2000, 5000],
[4000, 9000],
[3000, 6700],
...
]
const arr2 = [
...
{
value: 0
},
{
value: 0
}
...
]
arr1 与 arr2 的length都很长,几千左右
for (const item of arr1) {
for (const i = 0; i < arr2.length; i++) {
if (i > item[0] && i < item[1]) {
arr2[i].value = arr2[i].value + 1
}
}
}
我现在用for实现,但我觉得循环量太大,请问有没有什么可以优化的地方呢
方法一(推荐): 差分数组求前缀和 时间复杂度O(N)其中N为区间的最大下标值
方法二: 线段树时间复杂度O(N*logN),其中N为所有区间中最大的下标值,时间复杂度变高了但是支持动态的更新和删除区间