0

我有一个算法,它基于一个问题,您需要找到到达数组末尾的最小跳转次数。这个问题是在极客中被问到极客的,在我的情况下他们没有线性时间算法算法是在线性时间中,但是对于哪个测试用例,我的算法会失败?.问题的链接

链接:- 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 移动到数组的末尾,因为我们知道九步足以到达末尾。

  • 极端情况是,如果我们在末尾检测到零,我们什么也不做,因为我们已经到达了末尾。但是如果在开始时检测到零,或者在 0 是该范围内向前移动的最大元素的范围内检测到零,我们将返回a -1,因为我们无法继续前进,请告诉我此算法中是否存在错误。

4

1 回答 1

1

是的,这个算法不起作用。例子:

arr[] = {5,2,1,1,1,1,1}

您的算法会看到 5,然后看到最大数 2,然后转到 1 1 1 1。即:5、2、1、1、1、1 = 6 次跳跃。

而最佳结果是:5 -> 1(倒数第二个)-> 1 = 3 次跳跃

于 2015-09-04T14:01:26.673 回答