Algorithm 两个元素不相邻的最大和序列
我的max-sum实现如下,但我需要序列,它给出了我在Algorithm 两个元素不相邻的最大和序列,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我的max-sum实现如下,但我需要序列,它给出了我在google和stackoverflow上看到的max-sum,但没有输出序列 public int maxSum(int arr[]) { int excl = 0; int incl = arr[0]; for (int i = 1; i < arr.length; i++) { int temp = incl; incl = Math.max(excl + arr[i],
google
和stackoverflow
上看到的max-sum,但没有输出序列
public int maxSum(int arr[]) {
int excl = 0;
int incl = arr[0];
for (int i = 1; i < arr.length; i++) {
int temp = incl;
incl = Math.max(excl + arr[i], incl);
excl = temp;
}
return incl;
}
public int maxSum(int arr[]{
int excl=0;
int incl=arr[0];
对于(int i=1;i
所以32710应该返回(3和10)或者325107应该返回(3,5和7)或者{5,5,10100,10,5}将返回(5100和5)或者{1,20,3}将返回20
我确实想要这个解决方案,但我需要的返回值是包含在max sum中的元素序列,而不是max sum value您的意思是在这个数组中:[1,3,4,4,7,5,3],计算[1+4+4+5]和[3+2+7+3] 还大一点的 如果您这样做,这就是我的算法:
public int maxSum(int arr[]) {
int sum1 = 0;
int sum2 = 0;
for(int i = 0; i < arr.length; i+=2)
sum1 += arr[i];
for(int i = 1; i < arr.length; i+=2)
sum2 += arr[i];
return Math.max(sum1, sum2);
}
public int maxSum(int arr[]{
int sum1=0;
int-sum2=0;
对于(int i=0;i
或者这个:
public int maxSum(int arr[]) {
int sum1 = 0;
int sum2 = 0;
for(int i = 0; i < arr.length; i+=2)
sum1 += arr[i];
try {sum2 += arr[i + 1];} catch(ArrayIndexOutOfBoundsException e){}
}
return Math.max(sum1, sum2);
}
public int maxSum(int arr[]{
int sum1=0;
int-sum2=0;
对于(int i=0;i
看起来类似于最长增加片段问题(自上而下的方法)
您可以返回序列的和,而不是序列的长度。另外,不是跳过一个,而是跳过两个以避免相邻元素。相邻意味着等于?没有相邻意味着像序列2 5 4 7 8中那样的左侧和右侧元素与数组[2 3 4 4 5]中的5So相邻->2,3,4是这样的序列,对吗?没有2,4,5会是那个序列,因为2+4+5=11和2,4,5不是相邻的。请检查这个,它可能会解决问题。不,这是不正确的答案参见示例我添加了更多示例是的,在这个dp问题中使用了自上而下的方法,但我不需要求和,我要序列维护一个缓存,该缓存保存指向上一个索引的指针和当前的最大和。找到最大和后,可以进行回溯以查找其序列。