使用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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP