In a warehouse, there is a row of barcodes, where the i
-th barcode is barcodes[i]
.
Rearrange the barcodes so that no two adjacent barcodes are equal. You may return any answer, and it is guaranteed an answer exists.
Example 1:
Input: [1,1,1,2,2,2] Output: [2,1,2,1,2,1]
Example 2:
Input: [1,1,1,1,2,2,3,3] Output: [1,3,1,3,2,1,2,1]
Note:
1 <= barcodes.length <= 10000
1 <= barcodes[i] <= 10000
思路:跟621. Task Scheduler 差不多,priority queue + greedy取出剩余数目最多的数
from collections import Counter
import heapq
class Solution(object):
def rearrangeBarcodes(self, barcodes):
"""
:type barcodes: List[int]
:rtype: List[int]
"""
d=Counter(barcodes)
pq=[]
for k in d: heapq.heappush(pq,(-d[k],k))
res=[]
while len(res)!=len(barcodes):
ma,k=heapq.heappop(pq)
if res and k==res[-1]:
ma2,k2=heapq.heappop(pq)
res.append(k2)
heapq.heappush(pq,(ma2+1,k2))
heapq.heappush(pq,(ma,k))
else:
res.append(k)
heapq.heappush(pq,(ma+1,k))
return res