當前位置:
首頁 >
程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)
發布時間:2024/7/5
37
豆豆
生活随笔
收集整理的這篇文章主要介紹了
程序员面试金典 - 面试题 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 的最大人數及年份
- 將 baby 優先隊列改為數組排序,省去 baby 出隊時間
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;} };總結
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 42. 接雨水(双指针
- 下一篇: LeetCode 1043. 分隔数组以