原题说明
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
解题思路
题目要求将给定的数组重新排列,排列后的数组,相同的数不再相邻,并且保证一定存在解。
这题因为一定存在解,我们可以用贪心的算法重排数组。先计算每个数据出现次的频率。每次取出频率最高的两个数据,比较哪个可以放入当前新的数组中,并更新数据出现的频率。直到安排完所有的数据。
因为每次都要取出频率最高的两个数据,所以我们选择使用优先队列heap
来储存数据。
示例代码 (cpp)
1 | class Solution { |
示例代码 (java)
1 | class Solution { |
示例代码 (python)
1 | class Solution: |
复杂度分析
时间复杂度: O(nlogn)
空间复杂度: O(1)
归纳总结
我们在Youtube上更新了视频讲解,欢迎关注!