LeetCode 1854.人口最多的年份 Maximum Population Year(Java)

Posted 爱若信若盼若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1854.人口最多的年份 Maximum Population Year(Java)相关的知识,希望对你有一定的参考价值。

##1854.人口最多的年份Maximum Population Year(Easy)

##Array##

暴力枚举

枚举每一年year包含的人口,过程为遍历整个数组logs,对某个人log,若log[0] <= year && log[1] - 1 >= year则判断这个人属于该年包含的人口

时间复杂度: O ( n ∗ m ) O(n * m) O(nm),n为年龄跨度,m为人口总数

差分法

考虑一般情况,每年都有人出生的去世

diff[i] = m - n表示第i年有m个人出生,n个人去世

最后遍历diff数组,diff的前i项和即为第i年包含的人口数

时间复杂度: O ( m a x ( n , m ) ) O(max(n,m)) O(max(n,m))

class Solution {
    public int maximumPopulation(int[][] logs) {
        int[] diff = new int[110];
        
        for (int[] log : logs) { // 遍历每一个人的出生年份和死亡年份
            diff[log[0] - 1950] ++; // 人口增加
            diff[log[1] - 1950] --; // 人口减少
        }

        int cnt = 0, max = 0, res = 1950;
        for (int i = 0; i <= 100; i ++) {
            cnt += diff[i]; // 计算第i年包含的人口数
            if (cnt > max) { // 存活人数最多的年份
                max = cnt;
                res = i + 1950;
            }
        }

        return res;

    }
}

以上是关于LeetCode 1854.人口最多的年份 Maximum Population Year(Java)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 1854. Maximum Population Year

LeetCode笔记:Weekly Contest 240 比赛记录

火花程序找到人口最多的城市[重复]

LeetCode 0149. 直线上最多的点数

149 Max Points on a Line 直线上最多的点数

R语言处理1975-2011年的人口信息