华为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(' '))
1 回复 分享
发布于 2024-03-09 16:49 广东

相关推荐

不愿透露姓名的神秘牛友
07-17 14:38
干个蛋,干不了一点!!!!我真服了,还没搞完,很急。 今天ddl,活没干完直接通宵,刺激。食堂很好吃,感觉离职的时候会胖10斤。mt喜欢能直接干活的,没空指导我,很难受。每个人都是笑嘻嘻的,但是从他们聊天中都能感受到各种试探,我有点慌了大家真的nb,都能准时完成工作下班,我羡慕啊!!!!!每天好累,想离职了💔
牛客26106072...:能去字节实习说明你的能力挺被认可的,实习中的这种累更有利于个人职场成长,试着当熬夜打游戏一样熬一熬,实习的意义就是看自己的差距和适应能力,总比等到工作时各种不适应辞职要好得多吧?
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务