LetCode 1376
https://leetcode.com/problems/time-needed-to-inform-all-employees/
問題は、その後、従業員が、あなたはすべての時間を知っていれば、それは最高を求めている知っている、すべての従業員に通知するために時間を見つけることです。、それを知っている従業員の時間を計算するだけでパスを頭に彼のマネージャーに見つける方法、あなたはツリーを走査することができます。ツリーは現在、通知、リーフノード従業員のこの時間を取得するには、ルートノード(ヘッド)を見つけるために、子ノードから、その後、(親に子ノード点から)、バックポインタを介して行われます。親ノードが存在する場合に最適化することができるものの真ん中が今回算出された、二重カウントを継続する必要はありません。
コードは以下の通りであります:
from typing import List
class Solution:
def __getCost(self, pos: int, manager: List[int], informTime:List[int], cost:List[int]) -> int:
if manager[pos] == -1:
return informTime[pos]
if cost[pos] > 0:
return cost[pos]
cost[pos] = self.__getCost(manager[pos], manager, informTime, cost) + informTime[pos]
return cost[pos]
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
if n == 0:
return 0
cost = [0]*n
for i in range(0,n):
self.__getCost(i, manager, informTime, cost)
return max(cost)
sln = Solution()
assert(sln.numOfMinutes(0,0, [-1], [0]) == 0)
assert(sln.numOfMinutes(6, 2, [2, 2, -1, 2, 2, 2], [0,0, 1, 0, 0, 0]) == 1)
assert(sln.numOfMinutes(7, 6, [1, 2, 3, 4, 5, 6, -1], [0, 6, 5, 4, 3, 2, 1]) == 21)
assert(sln.numOfMinutes(15, 0, [-1,0,0,1,1,2,2,3,3,4,4,5,5,6,6], [1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]) == 3)
もっとここで興味深いことは、初めて私はleetcode上のpythonを書くということです。このタイプを実行しているときに見つかった一覧の[int]は、このタイプは、本書に記載されていません、私が言うことができませんでした。Googleのみのオリジナルを見つけるためには、内部のライブラリにあるhttps://docs.python.org/3/library/typing.htmlより良いコードを理解するために、いくつかの型ヒント。