我试图找出一个计算数组中最高数字总和的解决方案。但是,我的限制是我不能在数组中使用相邻的值。
如果给出数组int [] blocks = new int[] {15, 3, 6, 17, 2, 1, 20};
,则计算出的最高总和为52(15 + 17 + 20)。
我的目标是从递归解决方案转变为使用动态编程的解决方案,但是,我遇到了递归解决方案的问题。
我已初始化的基本案例:
if(array.length == 0)
return 0;
if(array.length == 1)
return array[0];
创建基本案例后,我不确定如何继续递归过程。
我最初试图说,如果array
具有一定的长度,那么我可以计算出计算的最大值(Math.max
):
例如if array.length = 3
return Math.max(array[0], array[1], array[2], array[0]+ array[2])
我遇到的问题是我可以得到一个长度为100的数组。 如何在此问题中使用递归?
答案 0 :(得分:1)
我认为你的问题的递归解决方案是(伪代码):
maxsum(A,0) = 0
maxsum(A,1) = A[0]
maxsum(A,k) = max(maxsum(A,k-2)+A[k-1], maxsum(A,k-1)), for k >= 2
其中maxsum(A,k)
表示从A
开始并且长度为0
的数组k
的子数组的最大总和。我确信您可以轻松地将其翻译成Java,它几乎完全按字面翻译。