我有一个由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;
}