如何循环遍历一个非常大的数组,并且仍然能够将元素移动到数组末尾而不中断循环?
在循环中,我正在消耗元素,但其中一些元素依赖于其他元素,而这些元素我最终想要移动。最终所有元素都将被消耗,因此循环不会无限。
我知道简单的方法是只使用辅助数组而不在循环中改变原始数组,但是数据非常大而且速度会非常慢
如何循环遍历一个非常大的数组,并且仍然能够将元素移动到数组末尾而不中断循环?
在循环中,我正在消耗元素,但其中一些元素依赖于其他元素,而这些元素我最终想要移动。最终所有元素都将被消耗,因此循环不会无限。
我知道简单的方法是只使用辅助数组而不在循环中改变原始数组,但是数据非常大而且速度会非常慢
您可以在 JavaScript 中使用“双指针”方法。关键思想是遍历数组并执行以下操作:
将特定元素移至最后
无需中断循环或创建新数组
用于此目的的代码如下:
输出:
优点:
时间复杂度:O(N),其中 N 是数组中元素的数量
空间复杂度:O(1),因为没有使用额外的空间
您可以使用单个循环和索引指针 (i) 就地修改数组:
如果需要移动元素,请使用 splice() 将其删除,并使用 push() 将其推至末尾。
在这种情况下不要增加 i,因为下一个元素将移至相同的索引。
如果元素被正常处理,则增加 i。