LeetCode刷题22-杀死进程
import org.apache.dubbo.common.utils.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; /** * 功能描述 HashMap+递归 * * @author ASUS * @version 1.0 * @Date 2022/8/24 */ public class Main05 { public static void main(String[] args) { /* 给 n 个进程,每个进程都有一个独一无二的 PID (进程编号)和它的 PPID (父进程编号)。 每一个进程只有一个父进程,但是每个进程可能会有一个或者多个孩子进程。它们形成的关系就像一个树状结构。只有一个进程的 PPID 是 0 ,意味着这个进程没有父进程。我们用两个序列来表示这些进程,第一个序列包含所有进程的 PID ,第二个序列包含所有进程对应的 PPID。 现在给定这两个序列和一个 PID表示你要杀死的进程,函数返回一个 PID 序列,表示因为杀这个进程而导致的所有被杀掉的进程的编号。当一个进程被杀掉的时候,它所有的孩子进程和后代进程都要被杀掉。 你可以以任意顺序排列返回的 PID 序列。 注意: (1)被强制关闭的进程编号一定在 PID 序列中。 (2)PID 序列个数>= 1,PPID 的个数与 PID 相等。 (3)必须考虑大的数据量情况下的性能,时间复杂度为 O(n^2)的解法通过的用例会很少。 示例 1: 输入: pid = [1, 3, 10, 5] ppid = [3, 0, 5, 3] kill = 3 输出: [1,3,5,10] */ List<Integer> pid = new ArrayList<>(4); pid.add(1); pid.add(3); pid.add(10); pid.add(5); List<Integer> ppid = new ArrayList<>(4); ppid.add(3); ppid.add(0); ppid.add(5); ppid.add(3); List<Integer> collect = killeProcess(pid, ppid, 3).stream().distinct().sorted().collect(Collectors.toList()); System.out.println(collect); } public static List<Integer> killeProcess(List<Integer> pid, List<Integer> ppid, int kill) { HashMap<Integer, List<Integer>> hashMap = new HashMap<>(4); for (int i = 0; i < ppid.size(); i++) { Integer integer = ppid.get(i); if (CollectionUtils.isNotEmpty(hashMap.get(integer))) { hashMap.get(integer).add(pid.get(i)); continue; } LinkedList<Integer> list = new LinkedList<>(); list.add(pid.get(i)); hashMap.put(ppid.get(i), list); } // kill LinkedList<Integer> killList = new LinkedList<>(); getKill(killList, hashMap, kill); return killList; } private static void getKill(LinkedList<Integer> killList, HashMap<Integer, List<Integer>> hashMap, int kill) { killList.add(kill); List<Integer> integerList = hashMap.get(kill); if (CollectionUtils.isNotEmpty(integerList)) { killList.addAll(integerList); for (Integer pid : integerList) { getKill(killList, hashMap, pid); } } } }
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16618076.html