582. 杀掉进程 --力扣 --JAVA

题目

系统中存在 n 个进程,形成一个有根树结构。给你两个整数数组 pid 和 ppid ,其中 pid[i] 是第 i 个进程的 ID ,ppid[i] 是第 i 个进程的父进程 ID 。

每一个进程只有 一个父进程 ,但是可能会有 一个或者多个子进程 。只有一个进程的 ppid[i] = 0 ,意味着这个进程 没有父进程 。

当一个进程 被杀掉 的时候,它所有的子进程和后代进程都要被杀掉。

给你一个整数 kill 表示要杀掉​​进程的 ID ,返回杀掉该进程后的所有进程 ID 的列表。可以按 任意顺序 返回答案。

解题思路

        1.通过HashMap(查询速度相对较快,使用List会直接超时)存储需要杀死的数据

        2.捕捉子线程,直到没有子线程后跳出循环

代码示例
class Solution {
    public List killProcess(List pid, List ppid, int kill) {
        Map> result = new HashMap<>();
        result.put(kill, new HashSet<>());
        boolean status = true;
        while (status) {
            status = false;
            for (int i = 0; i < pid.size(); i++) {
                if (result.get(ppid.get(i)) != null && result.get(pid.get(i)) == null) {
                    status = true;
                    Set set = result.get(ppid.get(i));
                    set.add(pid.get(i));
                    result.put(ppid.get(i), set);
                    result.put(pid.get(i), new HashSet<>());
                }
            }
        }
        return new ArrayList<>(result.keySet());
    }
}

你可能感兴趣的:(力扣练习,leetcode,java,算法)