华为od机试 启动多任务排序 JS实现

1.题目描述:
一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。

现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

例如: B任务依赖A任务,C任务依赖A任务,D任务依赖B任务和C任务,同时,D任务还依赖E任务。那么执行任务的顺序由先到后是:A任务,E任务,B任务,C任务,D任务。这里A和E任务都是没有依赖的,立即执行
那么输入为:"B->A C->A D->B D->C D->E"   输出结果为“A E B C D”
输入描述
输入参数每个元素都表示任意两个任务之间的依赖关系,输入参数中符号”->”表示依赖方向。

例如A->B表示A依赖B,多个依赖之间用单个空格分割

输出描述
输出为排序后的启动任务列表,多个任务之间用单个空格分割。
之前做的一道机试题,测试数据过了,用例一个没过,太难了,没有一点思路。有大佬能用js实现吗?
全部评论
let str = 'B->A C->A D->B D->C D->E' //[A-B] [A-C] [B-D] [C-D] [E-D] //[A,E][B,C][D] let list = str.split(' ') list = list.map(item=> item.split('->').reverse()) let result = [[]] list.forEach( item=> { let start = item[0] let end = item[1] let index1 = result.findIndex( item => { return item.includes(start)}) let index2 = result.findIndex( item => { return item.includes(end)}) //start和end都不存在 if(index1 == -1 && index2 == -1){ result[0].push(start) if(!result[1]){ result[1] = [] } result[1].push(end) }else if( index1 == -1 && index2 > -1) { //start不存在 end存在 result[0].push(start) }else if( index1 > -1 ) { //start存在 result = result.map( item => item.filter(el=> el!=end)) //去掉end 再插入end if(!result[index1+1]){ result[index1+1] = [] } result[index1+1].push(end) } }) let arr = [] result.forEach( item => { arr = [...arr, ...item.sort()]; //同一层级默认字母排序 }) console.log(arr.join(' '))
点赞 回复
分享
发布于 03-09 16:49 广东

相关推荐

头像
不愿透露姓名的神秘牛友
03-31 16:54
中芯国际 智能制造 13.8*15 硕士985
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务