让我们说,我有一个对象的集合或列表{A A B A B B C C D D E E F F F}
该列表随机填充。现在我希望它按如下方式重新排列列表
{A B C D E F A B C D E F A B C D F}
一种方法要为现有列表中的每个元素创建存储桶,然后遍历每个存储桶,顺序选择并添加预期列表中的元素,直到所有存储桶都持续存在。
答案 0 :(得分:0)
您可以动态使用存储桶。举个例子:
快速版:
虽然存储桶和输入序列不为空:
减少内存使用量版本
答案 1 :(得分:0)
假设输入只是A-Z字母。因此,在这种情况下,您将只有26个可能的角色。因此,只要输入存储在哈希表中,就可以使用哈希表来存储输入字符的计数。 现在只需使用此函数即可获得输出。
while(哈希中有任何项目) {
for(i 1 to 26) {
打印每个非零计数字符和减量计数
}
}
答案 2 :(得分:0)
将对象放入一个hashmap,其值为key,并显示出现次数的计数器(也保留插入顺序)。然后创建输出列表,迭代映射中的键并附加每个键值,同时减少其计数。重复,直到地图用完为止。这是python中的代码:
from collections import OrderedDict
def arrange(l):
d=OrderedDict()
for x in l:
d[x]=d.setdefault(x, 0)+1
r=[]
while len(d)>0:
for x in d:
r.append(x)
d[x]-=1
if d[x]==0:
del d[x]
return r