【发布时间】:2013-10-12 11:06:25
【问题描述】:
我有一个 N 个数字的数组,我只想从列表中删除那些元素,这些元素在删除后将创建一个新列表,其中没有更多相邻的 K 个数字对彼此。可以使用此限制创建多个列表。所以我只想要那个列表,其中剩余数字的总和是最大的,并且只作为输出打印那个总和。
到目前为止,我提出的算法的时间复杂度为 O(n^2)。是否有可能为这个问题获得更好的算法?
这是我的尝试:
int main()
{
//Total Number of elements in the list
int count = 6;
//Maximum number of elements that can be together
int maxTogether = 1;
//The list of numbers
int billboards[] = {4, 7, 2, 0, 8, 9};
int maxSum = 0;
for(int k = 0; k<=maxTogether ; k++){
int sum=0;
int size= k;
for (int i = 0; i< count; i++) {
if(size != maxTogether){
sum += billboards[i];
size++;
}else{
size = 0;
}
}
printf("%i\n", sum);
if(sum > maxSum)
{
maxSum = sum;
}
}
return 0;
}
【问题讨论】:
-
你能分享你想出的代码吗?
-
你能举个例子吗?您的问题描述不清楚。
-
你能不能说的更具体一些并提供一个例子?
-
如果你看实际的问题,我的回答甚至可能是错误的:(
-
@RBarryYoung 这个重述可能会有所帮助 - “从一个数组中选择任意数量的元素,其中选择的连续元素不超过 k 个。最大化所选择元素的总和。”
标签: algorithm