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 <= 100001 <= 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