一只青蛙正试图穿过池塘,但他只能在石头上跳跃,最多能跳五个单位。
我们得到了一个包含1和0(水为0,石头为1)的数组,任务是找到可能的最佳方法,以找到跳跃次数最少的路径(如果可能,使用分治)。
数组示例-
我刚刚开始学习算法,所以如果你们能帮我学习算法和代码就好了。
我对分而治之方法的想法如下:
program frog(array)
begin
divide array after the '1' left of the center of the array;
foreach (partialArray) do begin
if (length(partialArray) > 5) then frog(partialArray);
end foreach;
end.
让我们以给定的数组为例:[0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 1 0 0 1 | 0 1 0 0 1 0 1 0 0 0 0 0]
[0 0 0 1 | 0 0 1 | 0 1 0 0 1 | 0 1 0 0 0 0 0]
[0 0 0 1 | 0 0 1 | 0 0 1 | 0 0 1 | 0 0 0 0 0 0]
在这种情况下,青蛙会跳到第一个、第二个、第三个、第五个和第七个1
,然后才能达到目标(=6跳)。
为什么这个算法有效?让我们假设,它不会输出青蛙跳跃的最短路径。这意味着,我们没有找到青蛙跳跃最大的partialArray
s。如果一个partialArray
不会像一个最大的跳跃,那就意味着:在1
之后,partialArray内部至少有一个1
,青蛙仍然可以到达。这是不可能的,因为length(partialArray)≤ 5
有效。因此,partialArray
之后的每个1
都会太远(
我处理下面提供的一个可编码性问题, 斐波那契序列使用以下递归公式定义: 一只小青蛙想去河的对岸。青蛙最初位于河的一边(位置−1),想要到达另一边(位置N)。青蛙可以跳过任何距离F(K),其中F(K)是第K个斐波那契数。幸运的是,河上有许多树叶,青蛙可以在树叶之间跳跃,但只能在N号位置的岸边方向跳跃。 河上的叶子用一个由N个整数组成的数组表示。数组A的连续元素表示从0到N的连续位置− 1在河上。阵列
下面是寻找最小跳跃次数的算法谜题。发布了详细的问题声明和两个代码版本来解决这个问题。我做了测试,似乎两个版本都可以工作,我的第二个版本是版本一代码的优化版本,这使得我从开始,而不是持续增加,这可以通过不迭代所有的插槽来节省时间数组。 我的问题是,想知道我的第二个版本代码是否100%正确?如果有人发现任何逻辑问题,请指出。 问题陈述 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个
本文向大家介绍手写代码:青蛙跳台阶相关面试题,主要包含被问及手写代码:青蛙跳台阶时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 递归: 非递归:
问题:到达终点的最小跳跃次数 给定一个整数数组,其中每个元素表示可以从该元素向前执行的最大步数。编写一个函数返回到达数组末尾的最小跳转次数(从第一个元素开始)。如果一个元素是0,那么我们不能移动该元素。 例子: 输入:arr[]={1,3,5,8,9,2,6,7,6,8,9}输出:3(1- 来源:http://www.geeksforgeeks.org/minimum-number-of-jump
我正在调试以下问题并发布代码。不知道代码是否正确。我目前的疑问是,是否应该一直增加(在这一行--
给定一个整数数组,其中每个元素表示可以从该元素向前执行的最大步数。编写一个函数,返回到达数组末尾(从第一个元素开始)的最小跳转次数。如果元素为0,则无法在该元素中移动。 输入: arr[] = { 1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9} 输出: 3(1- 发现了从动态规划方法到其他线性方法的多种方法。我无法理解所谓的时间线性方法。这里是一个链接,其中提出了一种线性方法。