Algorithm 非连续元素的最大和(动态规划)
给定一个正整数数组,效率最高的是什么 从该数组中查找非连续元素的算法 加在一起,产生最大的总和 动态规划解决方案是使用一个辅助数组Algorithm 非连续元素的最大和(动态规划),algorithm,dynamic-programming,Algorithm,Dynamic Programming,给定一个正整数数组,效率最高的是什么 从该数组中查找非连续元素的算法 加在一起,产生最大的总和 动态规划解决方案是使用一个辅助数组maxSum,在该特定索引之前保持最大总和。我们首先设置数组的前2个索引,然后用max(数组[i]+maxSum[i-2],maxSum[i-1])填充数组的其余部分 我知道我们不能添加相邻元素,但我很难理解上述解决方案如何考虑到maxSum[I]中的前一个元素可能不是使用array[I]求和的结果 例如: index: 0 1 2 3 4 array: 3
maxSum
,在该特定索引之前保持最大总和。我们首先设置数组的前2个索引,然后用max(数组[i]+maxSum[i-2],maxSum[i-1])
填充数组的其余部分
我知道我们不能添加相邻元素,但我很难理解上述解决方案如何考虑到
maxSum[I]
中的前一个元素可能不是使用array[I]
求和的结果
例如:
index: 0 1 2 3 4
array: 3 5 -7 8 10
maxSum: 3 5 5 _
我们看到maxSum[2]不是数组[2]求和的结果
查找<代码> Max和[3 ] = MAX(数组[3 ] + Max和[1 ],Max和[2 ])< /C>,但是我们为什么不考虑<代码> Max和[2 ] +数组[3 ] < /代码>?由于maxSum[2]可能不包含相邻的数组[2]值。
首先,您可能无法完全理解该过程:- 对于每个索引i,
表示的maxSum
(通过包括第i个元素求和,通过排除第i个元素求和)max
,因为maxSum[3]=max(数组[3]+maxSum[1],maxSum[2])
表示采用array[3]+maxSum[1]
时的和,而array[3]
表示排除maxSum[2]
时的和array[3]
- M[i]包括元素i。在这种情况下,它不能包括元素i-1 所以M[i]=A[i]+M[i-2]
- M[i]不包括元素i。在这种情况下,M[i]=M[i-1] 因为我们不知道它是否真的包含i,所以我们计算这两种情况,并在两者之间选择最大值 M[i]=max(M[i-1],A[i]+M[i-2]) 上述解决方案如何考虑maxSum[i]中的前一个元素可能不是与数组[i]求和的结果 很简单。如果maxSum[i]中的前一个元素不包括在与数组[i]求和的结果中,我们可以查看maxSum[i-2]。我们明确地在 我们将其与不包括数组[i]的选项进行比较,后者是
- 我想你需要解释一下原因,就在这里
设M[i]是通过包含数组A的第一个i元素(条件是没有两个元素是连续的)可以获得的最大和。有两种可能性:
maxSum[i-1]
1.我知道这是一项任务,但为什么在现实世界中会有人想要这个呢?2.在你的例子中,最大和是15吗?3.一种方法是找到前3个值并比较它们的索引,一种更简单的方法是:for(i=0;i@iAmOren我在练习一个面试问题,而不是同样的任务…我的其他建议呢?感谢你花时间阅读/理解我的问题
maxSum[i-1]