程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 优先队列
      • 2.2 双指针

1. 题目

给定N个人的出生年份和死亡年份,第i个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算生存人数最多年份

你可以假设所有人都出生于1900年至2000年(含1900和2000)之间。
如果一个人在某一年的任意时期都处于生存状态,那么他们应该被纳入那一年的统计中。
例如,生于1908年、死于1909年的人应当被列入1908年和1909年的计数。

如果有多个年份生存人数相同且均为最大值,输出其中最小的年份。

示例:
输入:
birth = {1900, 1901, 1950}
death = {1948, 1951, 2000}
输出: 1901提示:
0 < birth.length == death.length <= 10000
birth[i] <= death[i]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/living-people-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 优先队列

  • 以时间为轴
  • 建立两个优先队列,baby 表示未出生的,people表示存活的
  • baby 按照出生时间出队,并 push 进 people,people 按照死亡时间 出队
  • 记录 people 的最大人数及年份
struct cmp1
{bool operator()(vector<int>& a, vector<int> &b){return a[0] > b[0];//出生时间的小顶堆}
};
struct cmp2
{bool operator()(vector<int>& a, vector<int> &b){return a[1] > b[1];//离开时间的小顶堆}
};
class Solution {
public:int maxAliveYear(vector<int>& birth, vector<int>& death) {priority_queue<vector<int>,vector<vector<int>>,cmp1> baby;priority_queue<vector<int>,vector<vector<int>>,cmp2> people;vector<int> mostP_year(2,0);//人数——年份int time = 2000, maxPeople = 0;for(int i = 0; i < birth.size(); ++i){baby.push({birth[i],death[i]});time = min(time, birth[i]);}while(!baby.empty() || !people.empty()){while(!baby.empty() && baby.top()[0]==time){	//baby出生了,push进peoplepeople.push(baby.top());baby.pop();}if(people.size() > mostP_year[0]){	//更新最大人数mostP_year[0] = people.size();mostP_year[1] = time;}while(!people.empty() && people.top()[1]==time)people.pop();//people离开了,弹出time++;//白驹过隙,惜乎惜乎}return mostP_year[1];}
};

在这里插入图片描述

  • 将 baby 优先队列改为数组排序,省去 baby 出队时间
struct cmp2
{bool operator()(vector<int>& a, vector<int> &b){return a[1] > b[1];}
};
class Solution {
public:int maxAliveYear(vector<int>& birth, vector<int>& death) {vector<vector<int>> baby;priority_queue<vector<int>,vector<vector<int>>,cmp2> people;vector<int> mostP_year(2,0);int time = 2000, maxPeople = 0, i;for(i = 0; i < birth.size(); ++i){baby.push_back({birth[i],death[i]});time = min(time, birth[i]);}sort(baby.begin(),baby.end(),[](vector<int>& a, vector<int> &b){return a[0] < b[0];});i = 0;while(i < baby.size() || !people.empty()){while(i < baby.size() && baby[i][0]==time){people.push(baby[i]);i++;}if(people.size() > mostP_year[0]){mostP_year[0] = people.size();mostP_year[1] = time;}while(!people.empty() && people.top()[1]==time)people.pop();time++;}return mostP_year[1];}
};

在这里插入图片描述

2.2 双指针

class Solution {
public:int maxAliveYear(vector<int>& birth, vector<int>& death) {sort(birth.begin(), birth.end());//按出生时间排序sort(death.begin(), death.end());//按离开时间排序int i=0, j=0, count = 0, maxAlive = 0, year = 2020;while(i < birth.size()){if(birth[i] <= death[j]){	//新出生+1count++;if(maxAlive < count){maxAlive = count;year = birth[i];}i++;}else{	//离开一人 -1count--;j++;}}return year;}
};

在这里插入图片描述

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

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

相关文章

这篇CVPR文章真是妙蛙种子到了妙妙屋

文 | kid丶源 | 知乎Paper&#xff1a;CReST: A Class-Rebalancing Self-Training Framework for Imbalanced Semi-Supervised Learning这篇文章是在组会上听到的&#xff0c;觉得真的是太太妙了。本文考虑的是半监督场景下的长尾分布问题&#xff0c;即此时我们不仅没有足够的…

rss

rss页面的生成&#xff1a;请求rss.aspx,重定向到rss.ashx.由ForumRssHandler负责处理1。BuildFeed()&#xff0c;其中ForumRssWriter。在其中起了重要作用2. WriteFeed()。 订阅1先增加一个feedid 和对应的urlFeedReaderDataProvider.Instance().AddFeed();2.根据对应的url读出…

LeetCode 1394. 找出数组中的幸运数(map计数)

文章目录1. 题目2. 解题2.1 map计数2.2 Python3解1. 题目 在整数数组中&#xff0c;如果一个整数的出现频次和它的数值大小相等&#xff0c;我们就称这个整数为「幸运数」。 给你一个整数数组 arr&#xff0c;请你从中找出并返回一个幸运数。 如果数组中存在多个幸运数&…

阳光留在心底

很少在Blog上写自己的生活&#xff0c;很少在Blog上写自己的琐事&#xff0c;觉得没什么好写的。来这座城市8年了&#xff0c;从毕业到工作&#xff0c;所有的这3000多个日子过得很充实但是也很艰辛&#xff0c;我经常笑&#xff0c;因为没有什么能比笑容更能释放压力。  不知…

预训练模型的记忆机制解密!

文 | python近年来&#xff0c;大规模预训练语言模型给自然语言处理领域带来了翻天覆地的变化。一提到预训练模型为什么好&#xff0c;标准回答往往是&#xff1a;利用了无标注自监督学习数据&#xff0c;习得了语言学与语义知识&#xff0c;并有效迁移到下游任务中。然而&…

python中的列表和元组_百度资讯搜索_python中的列表和元组

腾讯网 11小时前# 元组(tuple)是 Python 中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成。元组是一个有序列表,序列中的每个元素都分配一个数字(...百度快照数据分析师攻略 2020年11月11日 17:50分别使用max(tuple)、min(tuple)方法可以返回元组…

LeetCode 1395. 统计作战单位数(蛮力法)

1. 题目 n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。 每 3 个士兵可以组成一个作战单位&#xff0c;分组规则如下&#xff1a; 从队伍中选出下标分别为 i、j、k 的 3 名士兵&#xff0c;他们的评分分别为 rating[i]、rating[j]、rating[k]作战单位需满足…

站在2006的边缘

站在2006的边缘——代腾飞 2006年12月31日 于成都时光飞逝&#xff0c;中华元年2006年转眼来到了尽头明日清晨&#xff0c;冉冉升起的阳光将迎接新的一年的到来又将重新开始新的日月轮回站在这瞬间即逝的2006的边缘心潮难以宁静,我思索着、寻求着总想写下几句&#xff0c;也该…

谷歌Flan-T5诞生!1800种语言任务超大规模微调

编辑 | 泽南、小舟来源 | 机器之心不增加算力需求&#xff0c;谷歌总结的指令微调方法能让 8000 万到 5400 亿参数的模型都显著提升性能。人工智能一个重要的目标是开发泛化能力强的模型。在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;预训练语言模型在这方面取…

fft的c语言和matlab对比_傅里叶级数(FS)、傅里叶变换(FT)快速傅里叶变换(FFT)及量子傅里叶变换(QFT)之间推导关系...

1 引言傅里叶级数 (Fourier Series, FS) 是《高等数学》中遇到的一个重要的级数&#xff0c;它可以将任意一个满足狄利克雷条件的函数为一系列三角级数的和。最早由法国数学家傅里叶在研究偏微分方程的边值问题时提出&#xff0c;极大地推动了偏微分方程理论的发展。根据欧拉公…

OraOLEDbpus.dll找不到指定的模块的解决办法

OraOLEDbpus.dll找不到指定的模块的解决办法 使用Oracle Provider for OLE DB 进行数据库连接的时候&#xff0c;报错:&#xff1a;OraOLEDbpus.dll 找不到指定的模块在oracle的安装目录下却能找到OraOLEDbpus.dll&#xff0c;应该是其未能找到该路径&#xff0c;打开系统的环境…

LeetCode 1396. 设计地铁系统(map/unordered_map)

1. 题目 请你实现一个类 UndergroundSystem &#xff0c;它支持以下 3 种方法&#xff1a; checkIn(int id, string stationName, int t) 编号为 id 的乘客在 t 时刻进入地铁站 stationName 。 一个乘客在同一时间只能在一个地铁站进入或者离开。 checkOut(int id, string st…

python中object是什么数据类型_自学Python2.1-基本数据类型-字符串str(object) 上

自学Python2.1-基本数据类型-字符串str(object) 上 字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。 创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xff1a; var1 Hello World! var2 "Python Runoob" 1. Python…

.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务

.NET下使用DataAdapter保存数据时&#xff0c;如何生成command语句及使用事务 在.NET下&#xff0c;运用DATASET对数据进行批量更新时&#xff0c;需要与 DataAdapter配合使用。DataAdapter数据适配器的作用是生成数据更新时所需的insert,delete,update等语句&#xff0c;这些语…

文档智能SOTA被刷爆,DocVQA榜单首次突破90大关

文档智能&#xff08;DI, Document Intelligence&#xff09;主要指对于网页、数字文档或扫描文档所包含的文本以及丰富的排版格式等信息&#xff0c;通过人工智能技术进行理解、分类、提取以及信息归纳的过程。文档智能技术广泛应用于金融、保险、能源、物流、医疗等行业&…

react 遍历对象_React 源码系列 | React Children 详解

本文基于 React V16.8.6&#xff0c;本文代码地址测试代码 源码讲解React 中一个元素可能有 0 个、1 个或者多个直接子元素&#xff0c;React 导出的 Children 中包含 5 个处理子元素的方法。map 类似 array.mapforEach 类似 array.forEachcount 类似 array.lengthtoArrayonlyR…

程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)

1. 题目 你有一个用于表示一片土地的整数矩阵 land&#xff0c;该矩阵中每个点的值代表对应地点的海拔高度。 若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。 池塘的大小是指相连接的水域的个数。 编写一个方法来计算矩阵中所有池塘的大小&#xff0c;返回值需要从…

自定义组件--创建mxml组件

创建简单的mxml组件 Example components/CountryComboBox.mxml <?xml version"1.0" encoding"utf-8"?> <mx:ComboBox xmlns:mx"http://www.adobe.com/2006/mxml"> <mx:dataProvider> <mx:String>United States</mx…

19位算法工程师总结:机器学习项目成功落地的三条秘诀

文 | 天于刀刀又是一年金九银十&#xff0c;前几天小编刀刀在一次电话面试过程中被HR 的一个问题问得差点闪了腰。当时情况是这样的&#xff0c;在流利地介绍完之前的几个项目后&#xff0c;招聘小姐姐打断了我后续的&#xff08;忽悠&#xff09;节奏&#xff0c;郑重其事地反…

nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]

每日前端夜话0xCA每日前端夜话&#xff0c;陪你聊前端。每天晚上18:00准时推送。正文共&#xff1a;1558 字预计阅读时间&#xff1a;7 分钟作者&#xff1a;Nick Major翻译&#xff1a;疯狂的技术宅来源&#xff1a;coderrocketfuel介绍单个 Node.js 程序的实例仅在一个线程上…