假设我们有一个整数数组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]
,这需要移动数组中的所有元素,我希望不想做。
答案 0 :(得分:0)
对此没有做很多测试,但这是解决方案的简要概述。
System.arraycopy
虽然 general 方法几乎就是您所描述的,但我怀疑(defun make-cd (artist title rating ripped)
(push (list :artist artist :title title :rating rating :ripped ripped)
*cds*))
的性能要比(几乎)您要获得的其他任何性能都要好。不过我可能错了。