JavaScript路径简化问题:代码未达预期,求错误排查指导
问题排查与修正
你的代码逻辑是通过抵消数组中存在的任意相反方向来简化移动指令,但这种实现存在两个核心问题:
- 效率低下:每次调用
includes()和indexOf()都是O(n)时间复杂度,整体算法时间复杂度为O(n²),当指令数组规模较大时性能会明显下降。 - 逻辑严谨性不足:这种“删除任意相反方向”的逻辑不符合路径简化的常规规则——应该抵消最近一次的相反移动(类似括号匹配的栈结构),虽然最终总位移结果正确,但处理过程不符合实际移动的顺序逻辑。
修正后的代码(栈实现)
function dirReduc(arr) { const oppositeMap = { 'NORTH': 'SOUTH', 'SOUTH': 'NORTH', 'EAST': 'WEST', 'WEST': 'EAST' }; const stack = []; for (const move of arr) { const lastMove = stack[stack.length - 1]; if (lastMove === oppositeMap[move]) { stack.pop(); } else { stack.push(move); } } return stack; }
修正说明
- 采用栈结构处理,每次仅检查栈顶元素是否为当前移动的相反方向,完全符合实际移动路径的抵消逻辑。
- 用对象存储相反方向映射,查找时间复杂度为O(1),整体算法时间复杂度优化为O(n),性能大幅提升。
- 严格按照指令顺序处理,确保每一步抵消的是最近的相反移动,逻辑更严谨,也更符合题目的常规预期。
内容的提问来源于stack exchange,提问作者Lu-deng
相关产品推荐
相关产品推荐

