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

【数据结构-一维差分】力扣1854. 人口最多的年份

给你一个二维整数数组 logs ,其中每个 logs[i] = [birthi, deathi] 表示第 i 个人的出生和死亡年份。

年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, deathi - 1] 内。注意,人不应当计入他们死亡当年的人口中。

返回 人口最多 且 最早 的年份。

示例 1:
输入:logs = [[1993,1999],[2000,2010]]
输出:1993
解释:人口最多为 1 ,而 1993 是人口为 1 的最早年份。

示例 2:
输入:logs = [[1950,1961],[1960,1971],[1970,1981]]
输出:1960
解释:
人口最多为 2 ,分别出现在 1960 和 1970 。
其中最早年份是 1960 。

在这里插入图片描述
差分

class Solution {
private:
    static constexpr int offset = 1950;

public:
    int maximumPopulation(vector<vector<int>>& logs) {
        vector<int> diff(101);
        for(auto log : logs){
            diff[log[0]-offset]++;
            diff[log[1]-offset]--;
        }

        int maxNum = INT_MIN, res = 0, s = 0;
        for(int i = 0; i <= 100; i++){
            s += diff[i];
            if(s > maxNum){
                maxNum = s;
                res = i;
            }
        }
        return res + offset;
    }
};

由于题目给出了birth和death的范围,所以我们可以使下标i对应offset+i年。在使用差分的时候要注意的是death的那一年,就不算入人口,这和覆盖类的差分不一样,覆盖类差分需要diff[log[1] + 1 -offset]--。然后我们定义一个res来记录最多人口的年份,maxNum来计入最大人口的数量,然后去遍历每一年的人口,最后返回res+offset就是人口最多的年份。


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

相关文章:

  • 用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能
  • 架构师:使用 Atomix 实现分布式协调服务的技术指南
  • 完整http服务器
  • Excel如何把两列数据合并成一列,4种方法
  • 概念解读|K8s/容器云/裸金属/云原生...这些都有什么区别?
  • 【小程序】dialog组件
  • 陪玩小程序源码搭建,基于PHP+MySQL陪玩系统app源码
  • 解码未来:H.265与H.266技术对比及EasyCVR视频汇聚平台编码技术优势
  • 工具篇之Apache Commons
  • LeetCode HOT100系列题解之数组中的第K个最大元素(7/100)
  • 【Python系列】理解 Python 中的时间和日期处理
  • 汽车智能座舱展︱2025 广州国际汽车智能座舱及车载显示技术展览会
  • python绘制3D瀑布图
  • springboot体会BIO(阻塞式IO)
  • C++——static应用全解
  • Java面试八股文
  • Docker学习笔记-部署MySQL-命令解读
  • thinkphp6 事务不起作用了咋回事
  • Unity动画系统详解
  • PDB数据库数据查看和下载
  • 数学建模笔记—— 模糊综合评价
  • Swift 基本语法
  • HTTP 之 响应头信息(二十三)
  • 设计表时的三大范式(MySQL)
  • llama.cpp本地部署大模型
  • Vue3+setup+el-pagination+el-select封装下拉分页及懒加载