大厂排序笔试题求解

680 阅读1分钟

题目

最近遇到一个笔试题,如下,求大佬讲解一下,面试官提示可以使用递归,但是小弟确实没有头绪,希望各位大佬看看

/**
 * 排序后输出 id
 * before 2,意思是排在 id 2 的前面,after 5,意思是排在 id 5 的后面
 * first 意思是排数组最前面,last 意思是排在数组最后面,可能有多个 first 和 last
 * @param {Array<Object>} list
 * @returns {Array<string>}
 * @example
 * [
 *  { id: '1', before: '2' },
 *  { id: '2', before: '3' },
 *  { id: '3', before: '6' },
 *  { id: '5', first: true },
 *  { id: '6', last: true },
 *  { id: '7', before: '5' },
 *  { id: '8', after: '6' },
 * ];
 * 输出为
 * ['7', '5', '1', '2', '3', '6', '8'];