【发布时间】:2014-04-30 06:28:29
【问题描述】:
我必须在一个数组中找到最大和,使得没有 3 个连续的数字在一起 例如 3 4 5 1 2 应该还给我 11. (4+5+2)
我将在 9 岁时离开。 我正在使用动态编程,因为我希望运行时间为 O(N) 这个想法是 s 数组将存储最大和,s1 数组将存储看到的输入长度以跟踪连续数字
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class ex {
public static int maxSubArraySum(int a[], int size)
{
int s[]= new int[size+1];
s[0]=0;
int s1[]= new int[size+1];
s1[0]=0;
for (i = 1; i <= size; i++)
{
s1[i]= 1+s1[i-1];
if(s1[i]<3) {
int k=Math.max(s[i-1], a[i-1]+s[i-1]);
s[i]=k;
}
else {
s[i]=Math.max(a[i-1], a[i-1]+a[i]);
s1[i]=0;
}
}
return s[s.length-1];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
int size=sc.nextInt();
int a[]=new int[size];
for(int i=0;i<size;i++) {
a[i]=sc.nextInt();
}
System.out.println(maxSubArraySum(a, a.length));
}
}
【问题讨论】:
-
问题是什么?
-
Given 是一系列不同的正数。我们希望找到一个具有最大可能和的子序列,但限制是我们不能从原始序列中取三个连续的元素。例如,对于输入 1、6、5、2、7、9、3、4,具有最大可能和的子序列是 6、5、7、9、4(我们有两对连续元素 6、5 和7, 9 但不是三个连续的元素)。
-
这仍然不是问题。这只是你被赋予的任务。您在哪个部分遇到了问题?
-
在 3 4 5 1 2 的例子中。我的代码取 3 4 2 并给我 9。它应该给 4 5 2 =11。我认为当我位于数组中的第三个元素时,我没有正确找出最大值