📅  最后修改于: 2023-12-03 15:26:05.578000             🧑  作者: Mango
在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中两个相邻的条形码不相等。 你可以返回任何满足该条件的答案,请保证返回的答案存在。
输入:[1,1,1,2,2,2]
输出:[2,1,2,1,2,1]
输入:[1,1,1,1,2,2,3,3]
输出:[1,3,1,3,2,1,2,1]
首先统计每个数字的出现次数,然后使用优先队列(最大堆)分别作为奇、偶下标的候选数字队列。具体地:
import heapq
from collections import Counter
class Solution:
def rearrangeBarcodes(self, barcodes: List[int]) -> List[int]:
count = Counter(barcodes)
max_heap = [(-v, k) for k, v in count.items()]
heapq.heapify(max_heap)
result = [0] * len(barcodes)
idx = 0
while max_heap:
freq, num = heapq.heappop(max_heap)
for i in range(freq, 0):
if idx >= len(barcodes):
idx = 1
result[idx] = num
idx += 2
return result
注意:使用 heapq
在处理下标时需要倒序操作。