すべての従業員のために必要なleetcode5354。通知時間

すべての従業員のために必要なleetcode5354。通知時間


1 - N社は、各従業員のIDは、0からnまでの番号、ユニークで、従業員を擁しています。会社全体の責任はheadIDによって識別されます。

アレイマネージャでは、各従業員がマネージャ[I]は、i従業員の頭部の直下にある即時の担当者を有しています。総電荷、マネージャ[headID] = -1。タイトル提携を確保するには、ツリー構造で表示することができます。

同社の総関係者は全従業員の通知に緊急メッセージを望んでいます。彼は最初、すべての従業員が、この緊急メッセージが通知されるまで、これらの部下から部下を知らせる、彼の即時の部下に通知します。

I-従業員は([i]は分後に、すべての彼の即時の部下がニュースを広めるために始めることができinformTimeに言うことである)、そのすぐ部下のすべてを通知するinformTime [i]の分を必要としています。

緊急のメッセージを必要なすべての従業員に通知する分の数を返します。

実施例1:
入力:N = 1、headID = 0 、管理者= [-1]、informTime = [0]
出力:0
説明:総電荷は、会社の唯一の従業員です。

実施例2:
ここに画像を挿入説明
入力:N = 6、headID = 2 、マネージャ= [2,2、-1,2,2,2]、informTime = [0,0,1,0,0,0]
出力:1
説明:会社全体の責任のID = 2人の従業員が直接、他の人の下にあるすべてのスタッフに責任がある、彼はすべての従業員に通知する1分かかります。
番組上の図の会社の従業員のツリー構造。

カウントが出てきた二週間前にこのタイトルは、この質問にこだわりました。
アイデア:同じ鍵(上位)の前順走査後に優れと弟マップメモリとの対応、受像層。

 public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
        HashMap<Integer,ArrayList<Integer>>map=new HashMap<>();
        for(int i = 0; i < manager.length; i++) {
        //map的初始化
            if(!map.containsKey(manager[i])) {
                map.put(manager[i], new ArrayList<>());
            }
            map.get(manager[i]).add(i);
            //list里面存的是编号ID
        }
        int[]time=new int[n];//每个人被通知到需要多少时间
        Queue<Integer>queue=new LinkedList<>();
        queue.offer(headID);
        while(!queue.isEmpty()){
            int boss=queue.remove();
            ArrayList<Integer>list=map.get(boss);
            if(list!=null){
                for(int i=0;i<list.size();i++){
                //当前这个人的时间=上级被通知的时间+上级通知我的时间
                time[list.get(i)]=time[boss]+informTime[boss];
                queue.offer(list.get(i));
            }
            }
            
        }
        int ans=0;
        //找最后一个被通知的人的时间
        for(int i=0;i<time.length;i++)
            ans=Math.max(ans,time[i]);
        return ans;
    }

leetcode 100分の51

公開された65元の記事 ウォンの賞賛3 ビュー2252

おすすめ

転載: blog.csdn.net/qq_15764477/article/details/104731294