问题声明:给定数组:[1,0,1,0,1,1,1,1,1,0,1,1,1,0]输出:到达结束所需的最小步骤
条件:
我已经完成了不使用DP的情况下的使用,是否存在针对此问题的DP解决方案。
我的代码:
def minjump(arr):
n = len(arr)
if n <= 0 or arr[0] == 0:
return 0
index = jump = 0
while index < n:
if index == n-1:
return jump
if arr[index] == 0 and arr[index+1] == 0:
return 0
if arr[index] == 1:
if index < n-2 and arr[index+2] == 1:
jump +=1
index +=2
else:
jump += 1
index += 1
return jump
您可以使用dp解决更一般的问题,在伪代码中,下面的k表示您可以跳转的最大步数:
int n = arr.Length
int dp[n]
for (i = 0 ; i < n; i++) {
int lowerBound = max(i - k, 0)
for (j = i - 1; j >= lowerBound; j--) {
if (arr[j] == 1 && (j == 0 || dp[j] > 0)) {
dp[i] = min(dp[i], 1 + dp[j])
}
}
}
return dp[n - 1]
一个没有记忆的天真解决方案只是在列表中反复出现,采取一个或两个步骤,并保留所需的最小步骤:
def min_steps(array, current_count, current_position):
if current_position >= len(array): # Terminal condition if you've reached the end
return current_count
return (
min(
min_steps(array, current_count + 1, current_position + 1),
min_steps(array, current_count + 1, current_position + 2),
) # minimum count after taking one step or two
if array[current_position] # if current step is valid (non-zero)
else float("inf") # else, return float.infinity (fine since we're not imposing types on this prototype)
)
def minjump(arr):
result = min_steps(arr, 0, 0)
return 0 if result == float("inf") else result
问题:到达终点的最小跳跃次数 给定一个整数数组,其中每个元素表示可以从该元素向前执行的最大步数。编写一个函数返回到达数组末尾的最小跳转次数(从第一个元素开始)。如果一个元素是0,那么我们不能移动该元素。 例子: 输入:arr[]={1,3,5,8,9,2,6,7,6,8,9}输出:3(1- 来源:http://www.geeksforgeeks.org/minimum-number-of-jump
我有一个关于递归的小问题。下面的代码实际上是问题的答案到达终点的最小跳跃次数 当h==l和arr[l]==0时,函数返回sth,函数结束。否则,它将更新一个称为跳跃的变量,但我无法理解该语句。例如,当i=1或i=2时,跳跃的值是多少,依此类推。换句话说,我无法理解变量更新过程的意义。
给定一个数组,从第一个元素开始验证到达终点需要多少步。 示例:arr=[1,3,5,8,4,2,6,7,0,7,9] 1- 3个步骤。 到目前为止,我从极客那里得到了以下代码: 但是我想打印出哪些数字是最短的路径(1-3-8)。我如何调整代码来做到这一点? 我试图创建一个j的列表,但是由于5在循环中进行了测试,所以也添加了它。 问题的链接:https://www.geeksforgeeks.org
我处理下面提供的一个可编码性问题, 斐波那契序列使用以下递归公式定义: 一只小青蛙想去河的对岸。青蛙最初位于河的一边(位置−1),想要到达另一边(位置N)。青蛙可以跳过任何距离F(K),其中F(K)是第K个斐波那契数。幸运的是,河上有许多树叶,青蛙可以在树叶之间跳跃,但只能在N号位置的岸边方向跳跃。 河上的叶子用一个由N个整数组成的数组表示。数组A的连续元素表示从0到N的连续位置− 1在河上。阵列
这是一个数据结构和算法课程的问题,所以我不是在寻找一个具体的或完整的答案,但我希望得到一些提示来帮助我了解我是否在正确的轨道上(或那些可以指出我在正确轨道上的提示) 给定一个位置的无向图,其中节点为位置,道路为边(以遍历某条道路需要多少时间加权),在最大权重为5的情况下,找到能到达所有节点的点*的最小数目。*点是图上的任何点。它们可以在边或节点上。从现在起我就叫他们临界点。 举个例子,如果我们有这
我得到了一个值大于或等于0的整数数组,例如:[5,6,0,4,2,4,1,0,0,4] 我被要求实现一种算法,以从索引0开始的最短“跃点”数遍历数组,其中遍历定义如下: - 如果我选择跳到索引3,它包含值4,我可以从我当前的索引(3)下一次跳到4个点-所以我现在考虑索引4到7作为序列中的下一步。 我的算法必须确定一个最小跳数解,但可以在具有相同跳数的解中任意选择。 对于本示例,以下内容将是有效输出