使用Python查找最大人口年份的程序

假设我们有一个包含两列(出生、死亡)的表格,其中每一行代表第 i 个人的出生和死亡年份。某年 y 的人口是 y 期间活着的人数。当 y 在包含范围 [birth_i, death_i - 1] 内时,第 i 个人被计入第 y 年的人口中。(此人不计入他们死亡的年份)。因此,我们必须找到人口最多的最早年份。

所以,如果输入是这样的

Birth死亡
19702010年
19602020年
19401970年

那么输出将是 2,因为只有一个值与目标匹配,即 nums[4],所以 i = 4。现在 |4-2| = 2。

为了解决这个问题,我们将按照以下步骤操作 -

  • d := 一个映射,如果找不到某个键,则返回 0

  • res := 包含两项的列表 [2051, 0]

  • 对于矩阵中的每一年出生 YOB 和死亡年份 YOD,做

    • d[年] := d[年] + 1

    • 如果 d[year] >= res[1],则

    • res := 包含两个元素的列表 [(年份和 res[0] 的最小值), res[1]]

    • res := 包含两个元素的列表 [year, d[year]]

    • 如果 d[year] > res[1],则

    • 否则,

    • 对于 YOB 到 YOD 范围内的年份,请执行

    • 返回资源[0]

    让我们看看以下实现以获得更好的理解 -

    示例

    from collections import defaultdict
    def solve(matrix):
       d = defaultdict(int)
       res = [2051, 0]
       for YOB, YOD in matrix:
          for year in range(YOB, YOD):
             d[year] += 1
             if d[year] >= res[1]:
                if d[year] > res[1]:
                   res = [year, d[year]]
                else:
                   res = [min(year, res[0]), res[1]]
       return res[0]
    matrix = [[1970,2010],[1960,2020],[1940,1970]]
    print(solve(matrix))

    输入

    [[1970,2010],[1960,2020],[1940,1970]]
    输出结果
    1960