我有一个包含 N 个元素的列表,我想随机化它的顺序。
最好用最少的计算,并且能够用完内存(复制总数)。
到目前为止,我想出了:
- 创建新的空列表,从原始列表中取出第一个元素,将其插入到随机位置的新列表中,数量级似乎 O(N*N) 但不使用额外的内存。
- 创建一个新的ArrayList(容量N)(所以访问是O(1)),创建一个新的hashSet并插入所有可能的位置(N),取出原始List的第一个元素并将其插入新的arrayList的随机位置,从 hashSet 中删除这个位置,因为 ti 已经被使用了。
- 创建一个新的 HashSet,将所有元素添加到此 hashSet,并遍历该集合以创建一个新 List,并希望 hashSet 中的顺序是随机的。
在我看来,最便宜的是第三种选择,但我不确定结果会有多随机。有什么建议么?