在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。
请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。
示例 1:
输入:barcodes = [1,1,1,2,2,2]
输出:[2,1,2,1,2,1]
示例 2:
输入:barcodes = [1,1,1,1,2,2,3,3]
输出:[1,3,1,3,2,1,2,1]
提示:
1 <= barcodes.length <= 10000
1 <= barcodes[i] <= 10000
class Solution {
public:vector<int> rearrangeBarcodes(vector<int>& barcodes) {//条形码 数量unordered_map<int, int> counts;int n = barcodes.size();for(int i = 0; i < n; i++){counts[barcodes[i]]++;}priority_queue<pair<int, int>> q;for(auto &[x, cx] : counts){q.push({cx, x});}vector<int> res;while(q.size() > 1){auto [cx1, x1] = q.top();q.pop();auto [cx2, x2] = q.top();q.pop();res.push_back(x1);res.push_back(x2);cx1--;cx2--;if(cx1 > 0){q.push({cx1, x1});}if(cx2 > 0){q.push({cx2, x2});}}if(!q.empty()){res.push_back(q.top().second);}return res;}
};
这道题和力扣767方法一样,只不过这里由于条形码的种类较多,所以我们使用哈希表来存放,具体步骤参考主页力扣767