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

拼车(1094)

1094. 拼车 - 力扣(LeetCode)

解法:

class Solution {
public:
    bool carPooling(vector<vector<int>>& trips, int capacity) 
    {
        uint32_t passenger_cnt = 0;
        //将原数据按照from排序
        auto func_0 = [](vector<int> & i1, vector<int> & i2) {
            return i1[1] < i2[1];
        };
        sort(trips.begin(), trips.end(), func_0);

        //入队列的数据按照to排序
        auto func_1 = [](pair<int, int> & i1, pair<int, int> & i2) {
            return i1.second > i2.second;
        };
        vector<pair<int, int>> v;
        //给优先队列预先分配内存
        v.reserve(trips.size());
        //priority_queue 只需要记录 count 和 离开的时间
        priority_queue<pair<int, int> , vector<pair<int, int>>, decltype(func_1)> q( func_1, v);
        
        for (int i = 0; i < trips.size(); ++i) {
            //如果队列的top()数据小于trips[i][1],说明在trips[i][1]上车前top()已经下车
            while (!q.empty() && (q.top().second <= trips[i][1])){
                passenger_cnt -= q.top().first;
                q.pop();
            }

            passenger_cnt += trips[i][0];
            if (passenger_cnt >  capacity) {
                return false;
            }
            q.emplace(trips[i][0], trips[i][2]);
        }

        return true;
    }
};

总结:

时间复杂度O(NlogN),空间复杂度O(N),算法细节如代码注释


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

相关文章:

  • 数据结构 队列
  • dify实现原理分析-rag-检索(Retrieval)服务的实现
  • Cannot resolve symbol ‘XXX‘ Maven 依赖问题的解决过程
  • JVM--类加载器
  • 算法基础学习——二分查找(附带Java模板)
  • Java坦克大战
  • 在汇编语言中,ASSUME 是一个用于告诉汇编器如何将段寄存器与特定段名称关联的指令
  • AutoDL 云服务器:xfce4 远程桌面 终端乱码 + 谷歌浏览器
  • oracl:数据查询语言DQL
  • 密码强度验证代码解析:C语言实现与细节剖析
  • ChatGPT与GPT的区别与联系
  • cubemx配置ETH(以太网)
  • (java) IO流
  • 利用Edu邮箱解锁Notion Pro,提升学习与工作效率
  • 【Envi遥感图像处理】008:波段(批量)分离与波段合成
  • 【Prometheus】jmx_prometheus_javaagent监控java应用
  • 网站快速收录:提高页面加载速度的重要性
  • 使用DeepSeek批量生成文章,对搜索引擎产生一定影响。
  • 12.udp
  • 完整解读:从DeepSeek Janus到Janus-Pro!
  • 天融信 NGFW2.3 mibs
  • 书生大模型实战营4
  • SpringBoot 基础(Spring)
  • AI 计算的未来:Deepseek从中心化到去中心化的变革
  • c++:vector
  • 【Linux系统】进程间通信:认识命名管道