【发布时间】:2011-09-11 20:04:43
【问题描述】:
我们有一个大小为 N 的整数数组 A。给定另一个包含索引的数组 B,其中 size of B <= N 和 0<=B[i]<=N-1。
现在我们必须删除数组 A 中位置 B[i] 的所有元素。
所以删除意味着我们也在移动数组 A 中的元素。
有人可以帮我找到O(n) 解决这个问题的方法吗?并且可能是 O(1) 空间。
我想到的第一个解决方案是,遍历数组B并顺序删除A中的元素(包括移位)但它是O(n^2)。
【问题讨论】:
-
B 的元素是否按某种顺序排序?如果您还要移动 A,则 B 中元素的顺序很重要。
-
你对这些数字有什么限制吗?我的意思是,您可以使用一些特殊值将某些元素标记为“已删除”吗?如果是这样,这将是一件容易的事。
-
@Kiril,不允许将元素标记为已访问/删除:(
-
@SubmittedDenied, B数组中的元素不需要排序。
-
好吧,不允许使用 O(1) 空间和标记。甚至更多 - B 未排序。我不确定这是否可能。
标签: java c++ c algorithm logic