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

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

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

因此,如果输入如下所示:

出生 死亡
1970 2010
1960 2020
1940 1970

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

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

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

  • res:=具有两个项目[2051,0]的列表

  • 对于矩阵中的每个出生年份YOB和死亡年份YOD,请执行以下操作

    • 对于year在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]

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

更多Python相关文章,请阅读:Python 教程

例子

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程