作者热门文章
- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
1.对应lintcode链接:
872 · 终止进程 - LintCode
2.题目描述:
3.解题思路:
方法一:⭐⭐⭐
通过追溯父节点来判断一个节点的祖先节点中是否含有kill:
1.生成一个父亲表每个子进程可以通过id找到对应的父进程的id。
2.遍历子进程的数组从自己的id开始通过父亲表一直往上看能不能和kill的值一样如果一样就将其加入到答案中。
4.对应代码:
class Solution {
public:
/**
* @param pid: the process id
* @param ppid: the parent process id
* @param kill: a PID you want to kill
* @return: a list of PIDs of processes that will be killed in the end
* we will sort your return value in output
*/
vector<int> killProcess(vector<int> &pid, vector<int> &ppid, int kill) {
// Write your code here
unordered_map<int,int>Parent;
//通过子进程的pid能够找到父进程的pid
for(int i=0;i<pid.size();i++)
{
Parent[pid[i]]=ppid[i];
}
vector<int>ans{kill};//用于收集答案
for(auto ch:pid)//遍历子进程的pid
{
int k=ch;
int temp=k;
while(k!=0)//通过父亲表开始一直往上走
{
if(Parent[k]==kill){
ans.push_back(temp);
break;
}
//获取自己的父进程的id
k=Parent[k];
}
}
return ans;
}
};
但是了这种时间复杂度比较高下面我们来看另外一种方法:回溯
方法二⭐⭐⭐⭐⭐⭐
1.定义一个孩子表父进程通过自己的pid可以找到它所有的子进程的pid
2.dfs遍历每个子进程的子进程直到遍历结束。
对应代码:
class Solution {
public:
/**
* @param pid: the process id
* @param ppid: the parent process id
* @param kill: a PID you want to kill
* @return: a list of PIDs of processes that will be killed in the end
* we will sort your return value in output
*/
vector<int> killProcess(vector<int> &pid, vector<int> &ppid, int kill) {
// Write your code here
unordered_map<int,vector<int>>child;//父进程id对应它的孩子节点
int N=ppid.size();
for(int i=0;i<N;i++)
{
if(!child.count(ppid[i])){
child[ppid[i]]=vector<int>();
}
child[ppid[i]].push_back(pid[i]);
}
vector<int>ans;
dfs(ans,child,kill);
return ans;
}
void dfs(vector<int>&ans,unordered_map<int,vector<int>>&child,int kill)
{
ans.push_back(kill);
if(child.count(kill))//看有没有子进程的pid
{
for(auto x:child[kill])//遍历其孩子节点
{
dfs(ans,child,x);
}
}
}
};
我平时使用 Git 的时候,很多的 Git 命令我都不是很常用,工作中一般我们会配合一些可视化工具,或者编辑器自带的一些插件去维护 Git 仓库,但是我们也要记得一些常用 Git 命
本文转载自微信公众号「神光的编程秘籍」,作者神说要有光zxg。转载本文请联系神光的编程秘籍公众号。 对输入做验证是一个 web 应用的基本功能,不止前端要做、后端也要做:
我是一名优秀的程序员,十分优秀!