classSolution1(object):defrearrangeBarcodes(self, barcodes):"""
每次选出计数最大的两个进行插入,然后将计数器减去1
该方法每次都要遍历dict会超时
"""from collections import defaultdict
dictionary = defaultdict(int)
dictionary[-1]=-1for num in barcodes:
dictionary[num]+=1
res =[]for _ inrange(0,len(barcodes),2):
max1_key, max2_key =-1,-1for key in dictionary:if dictionary[key]> dictionary[max1_key]:
max2_key = max1_key
max1_key = key
elif dictionary[key]> dictionary[max2_key]:
max2_key = key
else:continue
dictionary[max1_key]-=1
dictionary[max2_key]-=1
res = res +[max1_key, max2_key]#当barcodes 为奇数个是会多加一个元素iflen(barcodes)&1==1:return res[:-1]else:return res
classSolution2(object):#奇偶插入法#先将数字按照出现次数从大到小排序#然后先插入偶数行再插入奇数行defrearrangeBarcodes(self, barcodes):from collections import Counter
index =0
result =[0]*len(barcodes)for number, count in Counter(barcodes).most_common():for _ inrange(count):
result[index]= number
index +=2if index >=len(barcodes):
index =1return result