【发布时间】:2019-05-07 22:56:04
【问题描述】:
假设我们有一个整数数组int[] A = {1,2,3,4,5,6,7,8,9}。
假设我们想从A 中选择一些随机整数,然后随机将其重新插入到数组的其他位置,如下所示:
先拍点int number = A[random.nextInt(A.length)]
假设我们随机选择5,然后在7和8之间随机重新插入,这样A就变成了{1,2,3,4,6,7,5,8,9}。
现在,我们显然可以通过创建一些临时变量int temp = 5,将子数组{6,7} 向左移动,然后将5 重新插入到7 占用的索引中来重新插入之前。但是有没有一种更有效的方法来做到这一点而无需移动一些子数组(并且无需更改为另一个数据结构,如链表)?因为显然我们有一些O(n) 的最坏情况,我们随机选择A[0],然后必须将其插入A[A.length],需要移动数组中的所有元素,我不想这样做.
【问题讨论】:
-
您可以查看System::arraycopy,它可以将
src和dest视为同一个数组。 -
“但是有没有更有效的方法来做到这一点,而无需移动一些子数组(并且无需更改为另一个数据结构,如链表)?” - 不。数组以连续的方式暴露给 Java 开发人员。所以你看到的是 O(n) 最坏的情况。