2012-04-30 38 views
0

我有这样的功能如何修改集合,如果我有要删除的元素索引和要添加的元素列表?

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

这个功能应该从orderToAdd增加订单ordersorders删除一些订单,订单指标中要删除ordersToRemove阵列传递的。

的问题是:从ordersToAdd每次顺序插入orderspos位置的地方,从orderToRemove所有索引,一个greather比pos必须在1增加。

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

什么是通用“算法”或修改集合时,我应该在同一时间添加删除元素,我有索引元素被删除?

注意我不能在两个任务中分配这个任务(订单添加,订单删除),因为订单是非常重要的,它内部的功能决定了应该添加和删除订单的顺序。

+0

您可以删除第一个对象,然后在集合中添加对象。 –

+0

@罗米尔:根据他最后的要求,这是不能做到的。 – amit

+0

没错。我也忘了说,在任何时候修改都可以停止,我需要'订单'副本指示最近的状态。所以也不可能计算出“最终”的订单,然后做工。即在任何修改点我需要**当前**状态。 – javapowered

回答

0

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

在您的方法indexIncrease中引入另一个变量。初始化为0。每次添加到ordersToAdd时增加这个变量。每当您考虑int[] ordersToRemove的值时,请不要只考虑此值,而应考虑ordersToRemove[i] + indexIncrease。因此,您将从ordersToRemove获得更新的值,而不需要遍历整个数组并在每次添加后增加值。

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

编辑按照意见和彻底改变问题描述:

  • 您可以通过不遗余力的ordersToRemove所有元素的循环,如果你使用binary index tree。随着它的复杂性,每一个修改变成O(log n),其中n是将存在的订单总数。
  • 考虑到你给索引树的输入限制比你已经拥有的蛮力解决方案差得多:每次迭代的元素数量可以忽略不计,性能上的缺点是可以忽略的,索引树太多了虚假的复杂性。

正如所看到的整体:我劝你当前的解决方案坚持。

+0

我需要'订单'在当前状态在任何步骤。我只修改'订单'。我不在乎'ordersToAdd'或'ordersToRemove'发生了什么,特别是如果需要的话我可以修改它们。我不明白如何引入一个额外的'int'变量我可以解决整个问题..订单被插入'订单'在某些位置。有时候在中间开始。所以'ordersToRemove'的一些索引应该增加,但有些不应该。 – javapowered

+0

@javapowered:不,我不同意这一点。您执行操作的顺序是什么?在你的问题描述中你只需要调用一个方法。我能想到的唯一可能性是你从最低指数开始插入并逐渐增加它们。你能更清楚地了解操作执行的顺序吗?另请添加输入限制约束。 –

+0

执行操作的顺序取决于'订单价格','订单量','当前可用的限制',所以我们可以假定没有特定的顺序。没有太多的订单或orderUpdate(添加或删除)。不超过10个。 – javapowered

相关问题