如何解决HackerRank的Jumping on the Clouds问题?JavaScript代码提交失败排查
代码问题分析
你的代码存在以下几处核心逻辑错误,导致提交失败:
- 边界处理错误:当
i已经是数组最后一个下标时,你仍然取next = c[0],此时已经到达终点无需再计算跳跃,会导致多余的跳跃次数被统计。 - 步长计算错误:for循环每次执行结束会自动执行
i++,你在循环内额外给i加3或者加2,会导致下标跳转远超预期。比如你想从下标i跳2步到i+2,只需要在循环内给i加1,加上循环自带的i++刚好到i+2,而你当前写的i = i+3会直接跳到i+4的位置,完全不符合题目要求。 - 跳跃优先级逻辑错误:题目要求最少跳跃次数,应该优先判断能不能跳2步(只要
i+2位置的云是0就跳2步,否则跳1步),你当前先判断i+1的逻辑反而会增加不必要的跳跃次数。 - 条件判断冗余:
if(!next && next === 0)等价于判断next为0,两个条件重复没有意义。
修正后的参考代码
function jumpingOnClouds(c) { let jumps = 0; let i = 0; // 到达最后一个云就停止,不需要再跳跃 while (i < c.length - 1) { // 优先跳2步,保证总跳跃次数最少 if (i + 2 < c.length && c[i + 2] === 0) { i += 2; } else { // 不能跳2步就跳1步 i += 1; } jumps += 1; } return jumps; }
内容的提问来源于stack exchange,提问作者Gamoxion
相关产品推荐
相关产品推荐

