Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonを使用して最大人口年を見つけるプログラム


2つの列(出生、死亡)を持つテーブルがあり、各行はi番目の人の出生年と死亡年を表しているとします。ある年の人口yは、yの間に生きている人々の数です。 yが包括的範囲[birth_i、death_i-1]にある場合、i番目の人はy年の人口でカウントされます。 (その人は彼らが死んだ年には数えられません)。したがって、人口が最も多い最も早い年を見つける必要があります。

したがって、入力が次のような場合

誕生
1970 2010
1960 2020
1940 1970

ターゲットと一致する値が1つしかないため、出力は2になります。つまり、nums [4]であるため、i=4になります。|4-2| =2。

これを解決するには、次の手順に従います-

  • d:=マップ。キーが見つからない場合は0を返します

  • res:=2つのアイテムを含むリスト[2051、0]

  • 出生YOBの各年、およびマトリックス内の死亡YODの年について、実行します

    • YOBからYODの範囲の年については、実行してください

      • d [年]:=d[年]+1

      • d [year]> =res [1]の場合、

        • d[年]>res[1]の場合、

          • res:=2つの要素を持つリスト[年、d[年]]

        • それ以外の場合

          • res:=2つの要素を持つリスト[(年の最小値と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

  1. Pythonで最大の建物の高さを見つけるプログラム

    値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ

  2. Pythonを使用して最大の確率でパスを見つけるプログラム

    n個のノード(ノードには0から番号が付けられます)を持つ無向加重グラフがあるとします。このグラフは、エッジリストを使用して入力として与えられ、各エッジeについて、そのエッジ確率[e]を通過する成功の確率があります。開始ノードと終了ノードもあります。最初から最後まで成功の確率が最大のパスを見つけて、成功の確率を返す必要があります。パスが見つからない場合は、0を返します。 したがって、入力が次のような場合 ノード0から2へのパスが2つあるため、出力は0.24になります。1つは確率0.2、もう1つはノード1を経由するパスの確率は0.4 * 0.6 =0.24で、これが最大です。 これを解