使用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]]的列表
- 对于year在YOB到YOD的范围内,执行
- 返回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