zoukankan      html  css  js  c++  java
  • leetcode582

    public class Solution {
        public IList<int> KillProcess(IList<int> pid, IList<int> ppid, int kill)
            {
                if (kill == 0)
                {
                    return pid;
                }
    
                int n = pid.Count;
                Dictionary<int, List<int>> tree = new Dictionary<int, List<int>>();
                for (int i = 0; i < n; i++)
                {
                    tree.Add(pid[i], new List<int>());
                }
                for (int i = 0; i < n; i++)
                {
                    if (tree.ContainsKey(ppid[i]))
                    {
                        var children = tree[ppid[i]];
                        children.Add(pid[i]);
                        if (!tree.ContainsKey(ppid[i]))
                        {
                            tree.Add(ppid[i], children);
                        }
                    }
                }
    
                List<int> result = new List<int>();
                traverse(tree, result, kill);
    
                return result;
            }
    
            private void traverse(Dictionary<int, List<int>> tree, List<int> result, int pid)
            {
                result.Add(pid);
    
                var children = tree[pid];
                foreach (var child in children)
                {
                    traverse(tree, result, child);
                }
            }
    }

    https://leetcode.com/problems/kill-process/#/solutions

    tree中记录的是每个进程及其直接的子进程。然后在调用traverse方法,这个方法是递归的进行寻找,每个级别的进程及其子进程,将其全部加入到要删除的进程列表result中。

  • 相关阅读:
    scala-隐式转换
    scala-泛型
    scala-模式匹配
    scala-LinkedList
    scala-高阶函数
    scala-数组/列表
    scala-map
    scala语法
    机器学习笔记
    Day 1 下午
  • 原文地址:https://www.cnblogs.com/asenyang/p/6892872.html
Copyright © 2011-2022 走看看