我有一个算法,它基于一个问题,你需要找到最小数量的跳转到达数组的末尾。这个问题在极客中被问到极客,他们没有线性时间算法如果算法处于线性时间但对于哪个测试用例我的算法会失败?。问题的链接
链接: - http://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/
输入:arr [] = {1,3,5,8,9,2,6,7,6,8,9}
从第一个元素开始,我们知道元素的最大范围是1,因此我们只能前进一步,所以从1> 3
现在在第二步中,我们知道元素的范围是3,因此从该步骤我们计算该范围的最大值,因此从3开始我们可以选择5,8,9并且该范围内的最大值是9
所以首先移动到9,即1-> 3-> 9然后从9移动到数组的末尾,因为我们知道九个步骤足以达到目的。< / p>
角落的情况是,如果我们在最后检测到零,我们什么都不做,因为我们已经到达终点。但是如果在开始时检测到零或者在0中是最大元素的范围内检测到零向前移动我们返回-1,因为我们无法进一步移动请告诉我此算法是否存在错误。
答案 0 :(得分:1)
是的,此算法不起作用。例如:
arr[] = {5,2,1,1,1,1,1}
你的算法会看到5,然后看到最大数字2,然后转到1 1 1 1.那就是: 5,2,1,1,1,1 = 6次跳跃。
虽然最佳结果是:5 - > 1(从结尾开始) - &gt; 1 = 3次跳跃