leetcode_1094 拼车

1. 题意

有n段旅程,每段旅程由上车点、下车点、上车人数组成。
求给定的旅程是否能让所有旅程顺利完成。
拼车

2. 题解

首先肯定要将旅程按上车位置进行排序。

2.1 模拟+小根堆

根据下车时间的早晚创建一个小根堆。

在每次进行新的旅程前判断是否有人下车了,即在堆非空情况下,判断最早下车旅程是否小于下一段旅程的起始点。

若有人下车,即将堆顶得到旅程给弹出释放车上的空位,直到堆中无元素或堆顶下车时间大于新旅程的上车时间。

若无人下车或堆空,则判断是否有足够的位置容纳新的旅程。
没有则返回结果,有则插入该旅程并减小容纳位置。

class Solution {
public:struct trip {trip( const vector<int> &arr){p = arr[0];f = arr[1];t = arr[2];}bool operator <(const trip &b) const{ return t > b.t;}int p;int f;int t;};bool carPooling(vector<vector<int>>& trips, int capacity) {sort(trips.begin(), trips.end(),[](const vector<int> &a, const vector<int> &b){ if ( a[1] == b[1])return a[2] < b[2];return a[1] < b[1];});priority_queue<trip> pq;int sz = trips.size();for (vector<int> &t: trips) {  trip v(t);while ( !pq.empty()  ) {auto top = pq.top();if (top.t > v.f)break;capacity += top.p;pq.pop();}if ( capacity < v.p )return false;capacity -= v.p;pq.push(v);}return true;}
};
2.2 判断每个位置是否合理+差分

由于我们并不在意实际在哪上下,而只是在意是否能容纳。
我们可以反向考虑每个位置点车上的总人数,如果大于了最大容量则不能完成;
否则可以完成该旅程。

所以可以用一个数组标识每个位置点上的总人数。
添加旅程的时候,将起始点到结束点范围的状态位置更新。
最后再判断是否有位置点超过最大容量即可。

  • 简单区间更新
class Solution {
public:bool carPooling(vector<vector<int>>& trips, int capacity) {int num[1001]={0};for (auto &v: trips) {for (int i = v[1]; i < v[2]; ++i) {num[i] += v[0];}}for (int i = 0 ; i <= 1000; ++i) {if ( num[i] > capacity)return false;}return true;}
};
  • 差分
    由于这里是区间进行更新相同值,而且我们最终还是要遍历每个点的;所以可以直接使用差分进行更新。
class Solution {
public:bool carPooling(vector<vector<int>>& trips, int capacity) {int num[1001]={0};for (auto &v: trips) {num[v[1]] += v[0];num[v[2]] -= v[0]; }int prefix = 0;for (int i = 0 ; i <= 1000; ++i) {prefix += num[i];if ( prefix > capacity)return false;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM+SpringBoot+Vue小区车位租赁系统

[技术实现] 小区车位租赁系统是使用SSMSpringBootVue前后端分离的管理系统。使用Spring框架可以在自动注入项目层级之间的调用对象&#xff0c;方便解耦&#xff0c;SpringMVC是体现了MVC设计思想的轻量级web框架&#xff0c;对web层进行解耦&#xff0c;使开发更简洁,MyBatis…

难以置信,一个小小的需求让我捣鼓出一个提效的网站来

难以置信&#xff0c;一个小小的需求让我捣鼓出一个提效的网站来 需求介绍 事情是这样的&#xff0c;有个群友在业务当中碰到一个小小的需求&#xff0c;需求是这样的: 页面当中存在多个输入框&#xff0c;输入框的 value 值是一个数值组成的字符串&#xff08;盲猜应该是身份…

关于开展人工智能专业人员“计算机视觉处理设计开发工程师”专项培训的通知

“人工智能技术与咨询”发布 工业与信息化部电子工业标准化研究院于2022年7月1日发布《人工智能从业技术人员要求》&#xff0c;现针对已发布标准于1月3日至7日在北京举办《自然语言与语音处理设计开发工程师》中级人才培养&#xff0c;下边是具体文件通知请大家查阅。行业人才…

CentOS7 关于 SELinux 的常用操作

SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个安全增强的 Linux 内核模块&#xff0c;用于提供更强大的访问控制和强制访问控制&#xff08;MAC&#xff09;机制。它通过在内核层面对进程和文件进行标记&#xff0c;并强制执行访问策略&#xff0c;提供了额外…

对一个多维随机变量作为线性变换以后的协方差矩阵

假设是一个n维的随机变量&#xff0c;它的协方差矩阵 对做线性变换&#xff0c;其中是一个矩阵&#xff08;当然也可以是一个标量&#xff09;&#xff0c;的协方差矩阵 证明如下&#xff1a; 将代入&#xff0c;得

游戏配置表的导入使用

游戏配置表是游戏策划的标配&#xff0c;如下图&#xff1a; 那么程序怎么把把这张配置表导入使用&#xff1f; 1.首先&#xff0c;利用命令行把Excel格式的文件转化成Json格式&#xff1a; json-excel\json-excel json Tables\ Data\copy Data\CharacterDefine.txt ..\Cli…

构建满足流批数据质量监控用火山引擎DataLeap

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 面对今日头条、抖音等不同产品线的复杂数据质量场景&#xff0c;火山引擎 DataLeap 数据质量平台如何满足多样的需求&#xff1f;本文将介绍我们在弥合大数据场景下…

Apache Flink(六):Apache Flink快速入门 - Flink案例实现

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style"hei…

Es6新特性

一、 let 声明变量 不能重复声明有块级作用域&#xff08;不影响作用域链&#xff0c;函数里可以拿到函数外的变量&#xff09;不存在变量提升 经典案列&#xff1a;&#xff08;把for里面的var i 0; 改成 let i 0就好了&#xff0c;不然items[i]就会报错&#xff09; 二、…

Mars3d标绘的时候通过绑定单击事件,查询点击落点的图层类型

需求期望&#xff1a; 期望可以判断标绘点落下的位置是什么图层类型&#xff0c;例如是否是3dtitles模型&#xff0c;或者是gltf模型&#xff0c;或者是其他数据图层。 需求来源&#xff1a; 标绘点时&#xff0c;无法知道点落下的地方的图层类型 解决方案&#xff1a; ma…

C++ string类(1)—初始化、容量操作、迭代器

目录 前言 一、string类 二、初始化 1、无参或带参 2、用字符串变量初始化 3、用字符串初始化 4、指定数量字符 三、容量操作 1、size 2、push_back 3、append​编辑 4、运算符 5、reserve 6、resize 四、迭代器 1、正向迭代器 2、反向迭代器 3、const迭代器…

排序算法介绍(四)快速排序

0. 简介 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;采用了分治的思想。它选择一个基准元素&#xff0c;通过一趟排序将待排序序列分割成独立的两部分&#xff0c;其中一部分的所有元素都比基准元素小&#xff0c;另一部分的所有元素都比基准…

邦芒支招:管理者做好管理带团队的十大招数

如何做好一个团队的管理&#xff0c;俗话说&#xff1a;”得民心者得天下“&#xff0c;一个好的团队&#xff0c;应该做到以人为本&#xff0c;这样才能使团队和个人双双获益。接下来小邦给大家分享如何做好一个团队的管理。 ​ ​要做好一个团队的管理&#xff0c;需要关注…

iOS代码混淆工具

目录 引言 混淆效果 字符串加密 代码插入 其他混淆选项说明 总结 参考资料 &#x1f512; 这是一篇介绍iOS代码混淆工具的技术博客&#xff0c;旨在帮助开发者提高代码安全性。本工具来自于Github的混淆词库和代码&#xff0c;通过差异化处理和代码合并生成数亿种用于混淆…

激活函数的作用

目录 1. 激活函数的作用 2. 常见的激活函数类型 3. 激活函数的选择 4. 激活函数的影响 1. 激活函数的作用 激活函数在人工神经网络中扮演着至关重要的角色。它们的主要作用是为网络中的每个神经元引入非线性变换&#xff0c;这使得神经网络能够学习和执行非线性复杂的任务。…

【备忘干货】c/c++ (wasm)和js互相调用记录

c/c&#xff08;wasm&#xff09;和js互相调用记录 废话 :)准备工作&#xff1a;安装Emscripten初探&#xff1a;C(wasm)之hello world进一步探究&#xff1a;接口调用1.js调用c&#xff0c;一些基本类型的传递&#xff08;char*&#xff0c;int&#xff0c;float&#xff09;以…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…

docker内容整理

docker内容整理 docker的安装 检查之前是否安装过docker&#xff0c;如果有使用yum remove docker卸载 [rootwoniu ~]# yum remove docker \ > docker-client \ > docker-client-latest \ > docker-common \ > docker-latest \ > docker-latest-logrotate \ &g…

行业分析:轻轨行业发展现状及市场投资前景

轻轨是城市轨道建设的一种重要形式&#xff0c;也是当今世界上发展最为迅猛的轨道交通形式。轻轨的机车重量和载客量要比一般列车小&#xff0c;因此叫做“轻轨”。 城市轻轨具有运量大、速度快、污染小、能耗少、准点运行、安全性高等优点。城市轻轨与地下铁道、城市铁路及其…