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


假设我们有一个包含两列(出生年份,死亡年份)的表,其中每一行代表第i个人的出生年份和死亡年份。某一年y的人口是y年存活的人数。如果y在包含范围[birth_i, death_i - 1]内,则第i个人计入y年的人口中。(此人未计入其死亡年份的人口中)。因此,我们必须找到人口最多的最早年份。

因此,如果输入类似于:

出生年份死亡年份
19702010
19602020
19401970

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

为了解决这个问题,我们将遵循以下步骤:

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

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

  • 对于矩阵中的每个出生年份YOB和死亡年份YOD,执行:

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

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

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

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

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

        • 否则:

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

  • 返回 res[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

更新于:2021年5月29日

505 次查看

启动您的职业生涯

完成课程获得认证

开始
广告