【发布时间】:2013-11-21 02:17:58
【问题描述】:
我有一个随机数生成器,它生成1 to k 之间的数字。我也有 int 类型的数组(即 int[]),其大小为 N ,其中 k 小于 N 。
现在的问题是我需要将唯一生成的数字保存到数组中(拒绝生成的重复数字)并且必须保持生成数字的顺序,而不使用任何额外的空间和O(N) 复杂性。即我同样的数组我也需要维护生成数字的顺序。这样我就可以按生成的顺序检索它们。不应该使用位图或额外的数组等。
这不是家庭作业。它的面试问题之一。我不应该使用任何额外的空间。他让我使用k 小于N 的事实,并且您需要在同一数组中灌输hashmap 的行为。我提出了许多使用额外空格的算法,但他也拒绝使用排序,但我无法维持生成的顺序。
【问题讨论】:
-
如果我是你,我会 1) 将我的元素保存到排序列表中,以及 2) 完成后调用 toArray()。 stackoverflow.com/questions/4031572/sorted-array-list-in-java。 PS:这听起来像是功课?
-
你能告诉我们你到目前为止有什么代码吗?您正在考虑什么方法?
-
“不使用任何额外空间”似乎是不可能完成的任务。即使是交换,您也需要占用 4 个字节的
int temp。 -
"同样的数组还需要维护生成数字的顺序" 另一个不可能完成的任务,因为数组只能有一个顺序。
-
@PM77-1:“不使用任何额外空间”通常是指不创建长度取决于输入的数组,换句话说,使用
O(1)额外空间是可以的。在他的声明“相同的数组我也需要维护生成的数字的顺序”中,OP 有点含糊,我同意,但如果你仔细阅读整个问题,他显然只有一个顺序,随机数的生成顺序.
标签: java algorithm data-structures