1854. 人口最多的年份

https://leetcode-cn.com/problems/maximum-population-year/

差分法

其实不用考虑[1993,1999]这种区间段,那样太复杂,只需要考虑两个端点,1993年人口+1,1999年人口-1即可

用delta数组维护每一年的人口变化量,然后从前往后一次遍历

class Solution:
    def maximumPopulation(self, logs: List[List[int]]) -> int:
        delta = [0]*101	#第0号表示1950年
        offset = 1950	#偏移量
        for b,d in logs:
             delta[b-offset] += 1
             delta[d-offset] -= 1
        maxp = 0	#人口峰值
        res = 2050
        cur = 0 #统计当前人口
        #从前往后遍历
        for i in range(101):
            cur += delta[i]
            #因为是从前往后,所以不用再考虑人口相同时取最早年份,因为相同时不更新
            if cur > maxp:  
                maxp = cur
                res = i
        # 记得加上偏移
        return res + offset

最后更新于