Problem
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
解题思路
这一题的题意就是让我们打乱数据,让每两个相邻的数据不同即可。我们可以首先计算一下每个数据出现了多少次,然后按照次数进行降序排序,然后再数组中隔着插入数据即可。之所以需要降序排序是为了处理如 [ 1 , 1 , 2 ] [1, 1, 2] [1,1,2]这样的数据。
代码如下:
class Solution:
def rearrangeBarcodes(self, barcodes):
d = collections.Counter(barcodes)
d = sorted(d.items(), key=lambda x: x[1], reverse=True)
ret = [None] * len(barcodes)
p = 0
for i in range(len(d)):
for j in range(d[i][1]):
ret[p] = d[i][0]
p += 2
if p >= len(barcodes):
p = 1
return ret