Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm dân số tối đa năm bằng Python

Giả sử chúng ta có một bảng có hai cột (năm sinh, năm mất) trong đó mỗi hàng là đại diện cho năm sinh và năm mất của người thứ i. Dân số của năm y là số người còn sống trong năm y. Người thứ i được tính vào dân số của năm y khi y nằm trong phạm vi bao gồm [sinh_i, tử_i - 1]. (Người đó không được tính vào năm mà họ chết). Vì vậy, chúng ta phải tìm ra năm sớm nhất có dân số tối đa.

Vì vậy, nếu đầu vào giống như

Sinh Cái chết
1970 2010
1960 2020
1940 1970

thì đầu ra sẽ là 2 vì chỉ có một giá trị phù hợp với đích, đó là nums [4], vì vậy i =4. Bây giờ | 4-2 | =2.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • d:=Một bản đồ, trong đó nếu không tìm thấy khóa nào đó, hãy trả về 0

  • res:=một danh sách có hai mục [2051, 0]

  • cho mỗi năm sinh YOB và năm chết YOD trong ma trận, thực hiện

    • trong năm trong phạm vi YOB đến YOD, thực hiện

      • d [năm]:=d [năm] + 1

      • nếu d [year]> =res [1] thì

        • nếu d [year]> res [1] thì

          • res:=một danh sách có hai phần tử [year, d [year]]

        • nếu không,

          • res:=danh sách có hai phần tử [(tối thiểu của năm và res [0]), res [1]]

  • trả lại res [0]

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

[[1970,2010],[1960,2020],[1940,1970]]

Đầu ra

1960