LC 16.10. 生存人数--差分数组

题目参考: https://leetcode.cn/problems/living-people-lcci/
知识点: 差分数组
应用场景: 如果有1个包含5000w个元素的数组,然后又频繁的区间修改工作,比如让第1个数到第1000w个数加1,而且这种操作是频繁的,则可以在O(1) 时间内使用差分数组实现。
步骤参考1

class Solution {
public:
    int maxAliveYear(vector& birth, vector& death) {
        int n = birth.size();
        vector a(2003, 0); // 差分数组a
        for (int i = 0; i < n; i++)
        {
            int x = birth[i], y = death[i];
            a[x] += 1; a[y+1]-=1; // 表示对区间[x, y]的元素全部加一
        }
        int mx = 0, idx = 0, sum(0);
        for (int i = 1900; i <= 2000; ++i) //计算差分数组的前缀和,每一个前缀和对应问题的每一个位置的人数
        {
            sum += a[i];
            if (mx < sum)
            {
                mx = sum; 
                idx = i;
            }
        }
        return idx;

    }
};

作者:qwesde
链接:https://leetcode.cn/problems/living-people-lcci/solution/chai-fen-shu-zu-zhe-lei-ti-bi-jiao-dian-hpz8t/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考:
[1] https://baijiahao.baidu.com/s?id=1726813595390831261&wfr=spider&for=pc

你可能感兴趣的:(LC 16.10. 生存人数--差分数组)