gpt4 book ai didi

c - 运行分而治之算法后打印数组中的最大子数组值

转载 作者:行者123 更新时间:2023-11-30 17:09:47 24 4
gpt4 key购买 nike

我已经实现了一个从值数组中查找最大子数组的解决方案。我可以在运行分而治之算法之前打印出完整的数组,但我似乎无法弄清楚如何在算法运行后打印子数组。

int newArray[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};

int arraySize = (sizeof(newArray)/sizeof(int));

printArray(newArray, 0, arraySize - 1);

int total = maxSubDiv(newArray, 0, arraySize - 1);

这是我的主要功能的片段。我正在使用 printArray 函数在找到最大子数组之前打印完整数组。 maxSubDiv函数如下:

int maxSubDiv(int * Array1, int left, int right)
{
if(left == right)
{
return Array1[1];
}

int middle = (left + right)/2;

return findMax(maxSubDiv(Array1, left, middle), maxSubDiv(Array1, middle + 1, right), leftRightCross(Array1, left, middle, right));

}

int leftRightCross(int * Array1, int left, int middle, int right)
{
int sum = 0;

int leftSum = INT_MIN;

for(int i = middle; i >= left; i--)
{
sum = sum + Array1[i];
if(sum > leftSum)
{
leftSum = sum;
}
}

sum = 0;
int rightSum = INT_MIN;

for(int i = middle + 1; i <= right; i++)
{
sum = sum + Array1[i];
if(sum > rightSum)
{
rightSum = sum;
}
}

sum = leftSum + rightSum;

return sum;
}

该算法似乎测试得很好,但我只是在打印包含最大子数组整数的子数组时遇到问题。非常感谢任何帮助!

struct tuple{

int begin;
int end;
int length;

};

int findMax(int left, int right, int cross)
{

int max;
if(left > right && left > cross)
{
max = left;
}

else if(right > left && right > cross)
{
max = right;
}

else
{
max = cross;
}

return(left, right, cross);
}

最佳答案

maxSubDiv() 中,当您比较三个子数组的最大值时,返回最大子数组的元组(开始、结束、长度),而不仅仅是长度。 "begin", "end" 指定最大子数组的范围,稍后您可以利用它进行打印。您还应该从 leftRightCross() 返回 (begin, end, length)。

例如,

// pesudocode
if max is left:
return (left_begin, left_end, left_length)
if max is right:
return (right_begin, right_end, right_length)
if max is middle:
return (middle_begin, middle_end, middle_length)

元组可以在 C 语言中的 struct 中实现。

关于c - 运行分而治之算法后打印数组中的最大子数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com