0

我有这样的功能

applyDiff(List orders, List ordersToAdd, int[] ordersToRemove) {
}

这个函数应该添加订单和删除一些订单,orderToAdd要删除的订单的索引在数组中传递。ordersordersordersToRemove

问题是:每次将 order fromordersToAdd插入到position 的orders某个位置时,所有来自该 a 的pos索引都必须增加 at 。orderToRemovepos1

那么我应该动态修改ordersToRemove数组吗?

当我应该同时添加-删除元素并且我有要删除的元素索引时,什么是通用“算法”或修改集合?

请注意,我不能在两个(添加订单,删除订单)中中断此任务,因为订单非常重要,并且其中的功能决定了应该添加和删除订单的顺序。

4

1 回答 1

0

您没有明确指定如何确定您插入的确切位置,也没有指定语义int[] ordersToRemove(尽管对于后者,我认为考虑到您的笔记,它是要删除的对象的索引)。但是我仍然可以建议一个“算法”,您将相应地应用它:

在您的方法中再引入一个变量indexIncrease。将其初始化为0. 每次添加都会ordersToAdd增加这个变量。每次考虑一个值时,int[] ordersToRemove不要只考虑这个值,而是考虑ordersToRemove[i] + indexIncrease. 因此,您将获得更新的值,ordersToRemove而无需迭代整个数组并在每次添加后增加值。

请注意,应用此“算法”可以确保列表orders始终处于当前状态,但ordersToRemove根本不会更新。希望这对你有用。

编辑根据评论和完全改变的问题描述:

  • ordersToRemove如果使用二叉索引树,则可以避免循环遍历 的所有元素。有了它,每个修改都变得O(log n)复杂,其中 n 是将存在的订单总数。
  • 考虑到你给索引树的输入限制比你已经拥有的蛮力解决方案要糟糕得多:每次迭代的元素数量很少,性能缺陷可以忽略不计,索引树的虚假复杂性太多。

从整体上看:我建议您坚持当前的解决方案

于 2012-04-30T07:56:54.130 回答