使用Python查詢最大人口年份的程式


假設我們有一個包含兩列(出生年份,死亡年份)的表,其中每一行代表第i個人的出生年份和死亡年份。某一年y的人口是y年存活的人數。如果y在包含範圍[birth_i, death_i - 1]內,則第i個人計入y年的人口中。(此人未計入其死亡年份的人口中)。因此,我們必須找到人口最多的最早年份。

因此,如果輸入類似於:

出生年份死亡年份
19702010
19602020
19401970

那麼輸出將是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

更新於:2021年5月29日

505 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.