题目参考: https://leetcode.cn/problems/living-people-lcci/
知识点: 差分数组
应用场景: 如果有1个包含5000w个元素的数组,然后又频繁的区间修改工作,比如让第1个数到第1000w个数加1,而且这种操作是频繁的,则可以在O(1) 时间内使用差分数组实现。
步骤参考1
class Solution {
public:
int maxAliveYear(vector<int>& birth, vector<int>& death) {
int n = birth.size();
vector<int> 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
网友评论