使用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,执行:
对于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
广告