给出了一系列成本。你可以向前跳两次,也可以向后跳一次。如果你在一个特定的指数上着陆,你必须把成本加到你的总数上。找到穿过数组或到达数组末端所需的最小成本。
输入:
5 (Number of elements in the array)
[9,4,6,8,5] (Array)
1 (Index to start)
输出:
12
说明:我们从指数1开始,跳到3然后跳出来,总成本为8 4=12。
我们如何为此构建DP解决方案?
基于DP的解决方案-以自下而上的方式填充一维成本阵列。包括两个步骤:
时间复杂度:O(n),其中n是输入数组的长度。
# Python3 snippet
# Inputs: startIndex, array A of non negative integers
# Below snippet assumes A has min length 3 beginning from the startIndex. We can handle smaller arrays with base cases - thus, not listing them out explicitly
import math
costs = [math.inf] * len(A)
costs[startIndex] = A[startIndex]
costs[startIndex+1] = A[startIndex] + A[startIndex+1] + min(A[startIndex+1], A[startIndex-1] if startIndex >=0 else A[startIndex+1])
N = len(A)
for i in range(startIndex, N):
if i+1 < N:
costs[i] = min(costs[i], costs[i+1] + A[i])
if i + 2 < N:
costs[i+2] = costs[i] + A[i+2]
print(min(costs[-1], costs[-2]))
您可以使用Dijkstra算法(图)来解决这个问题。
遵循以下步骤:
1.通过将第i个索引的节点与第(i-1)和第(i-2)个索引的节点及其成本(如果可能)连接,生成加权有向图。
2.应用Dijkstra算法寻找初始节点(索引)和目标节点(索引)之间的最短路径。
您可以将递归程序与Dp一起使用
//cur will the final destination that is last element at first execution
//N is no of elements
int Dp[N]={0};
Dp[0]=element[0]; //initial condition
least_path(cur,*elements,N)
{
if(cur>N-1 || cur<0)
return INT_MAX;
if(Dp[cur])
return Dp[cur];
int temp1=least_path(cur-2,*elements,N)+element[cur];
int temp2=least_path(cur+1,*elements,N)+element[cur];
Dp[cur]=min(temp1,temp2);
return Dp[cur];
}
给定一个数组,从第一个元素开始验证到达终点需要多少步。 示例:arr=[1,3,5,8,4,2,6,7,0,7,9] 1- 3个步骤。 到目前为止,我从极客那里得到了以下代码: 但是我想打印出哪些数字是最短的路径(1-3-8)。我如何调整代码来做到这一点? 我试图创建一个j的列表,但是由于5在循环中进行了测试,所以也添加了它。 问题的链接:https://www.geeksforgeeks.org
我得到了一个值大于或等于0的整数数组,例如:[5,6,0,4,2,4,1,0,0,4] 我被要求实现一种算法,以从索引0开始的最短“跃点”数遍历数组,其中遍历定义如下: - 如果我选择跳到索引3,它包含值4,我可以从我当前的索引(3)下一次跳到4个点-所以我现在考虑索引4到7作为序列中的下一步。 我的算法必须确定一个最小跳数解,但可以在具有相同跳数的解中任意选择。 对于本示例,以下内容将是有效输出
我有一个“使用递归到达数组末尾的最小跳跃次数”的代码。但我无法打印序列。(vector vec中没有可打印的内容) 如有任何帮助,将不胜感激。 说明: 我想以最小跳跃从数组的第一个元素(即2)到达最后一个元素(即4) 跳转的方式: 第一个元素是2。这意味着我最多可以在阵列中进行2次跳跃。如果我跳第一步,那么我可以跳到第二个元素(即3),或者如果我跳第二步,那么我可以跳到第三个元素(即1) 第二个元
我试图在N大小的数组的k个元素中找到最小和次最小的元素(没有排序和最小/最大堆)。 使用传统的方法,首先从第< code>0个元素开始,在第< code>k个元素中找到最小的和第二小的元素,然后将起始点移动< code>1并重复该过程。但是它的复杂度是< code>O(Nk)。如果可能,我需要一个复杂度为< code>O(N)的解决方案。对此有什么建议吗? 在Jubobs的注释后编辑:例如,如果s
给定一个整数数组,其中每个元素表示可以从该元素向前执行的最大步数。编写一个函数,返回到达数组末尾(从第一个元素开始)的最小跳转次数。如果元素为0,则无法在该元素中移动。 输入: arr[] = { 1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9} 输出: 3(1- 发现了从动态规划方法到其他线性方法的多种方法。我无法理解所谓的时间线性方法。这里是一个链接,其中提出了一种线性方法。
问题内容: 我正在尝试自动执行水平栏的滚动,其中水平栏的元素是动态的,并且可以从API中获取。 有没有一种方法可以在appium中使其自动化? 问题答案: 如果页面底部有任何元素或文本,则可以使用UiAutomator2。 如果您使用的是appium,请添加所需的功能’UiAutomator2’。 现在,如果您有元素的ID,请使用以下函数 如果您有元素的文本,请使用它。 如果您不知道botton中