使用Python查找最大人口年份的程序
假设我们有一个包含两列(出生、死亡)的表格,其中每一行代表第i个人的出生和死亡年份。某年y的人口是y期间活着的人数。当y在包含范围[birth_i,death_i-1]内时,第i个人被计入第y年的人口中。(此人不计入他们死亡的年份)。因此,我们必须找到人口最多的最早年份。
所以,如果输入是这样的
那么输出将是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