当前位置: 首页 > article >正文

【数据结构-堆】力扣1054. 距离相等的条形码

在一个仓库里,有一排条形码,其中第 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


http://www.kler.cn/a/514080.html

相关文章:

  • 写一个类似Chatgpt或豆包的交换界面详解
  • 【C++】在线五子棋对战项目网页版
  • springboot中配置logback-spring.xml
  • 什么是三高架构?
  • 小程序,uniapp中map的使用
  • 鸿蒙开发中的骨架图:提升用户体验的关键一环
  • 兼职全职招聘系统架构与功能分析
  • 过年远控家里电脑打游戏,哪款远控软件最好用?
  • Oracle 数据库常见字段类型大全及详细解析
  • 02.Flink内存模型以及细粒度的资源管理
  • Python 模拟真人鼠标轨迹算法 - 防止游戏检测
  • 【Prometheus】PromQL进阶用法
  • MAC 地址转换为标准大写格式
  • YOLOv9改进,YOLOv9检测头融合DiverseBranchBlock(多样分支块),适合目标检测、分割任务
  • 支持向量机SVM的应用案例
  • Python爬虫获取微店商品详情时如何设置请求头
  • Java毕设项目:基于Springboo校园足球社团网站系统设计与实现开题报告
  • Go项目实战-让自定义Error支持Go的errors.Is判定以及原型模式的应用
  • 高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计
  • 使用递归处理无限自关联表