C++ 最大子阵kadane算法 void kadane(int A[],int N,int&bestStart,int&bestEnd,int&bestSum) { int max_end_此处=0; int max_so_far=0; 最佳开始=0; 对于(int i=0;i当前最大值) { max_so_far=max_ending_在此; bestEnd=i; } } }

C++ 最大子阵kadane算法 void kadane(int A[],int N,int&bestStart,int&bestEnd,int&bestSum) { int max_end_此处=0; int max_so_far=0; 最佳开始=0; 对于(int i=0;i当前最大值) { max_so_far=max_ending_在此; bestEnd=i; } } },c++,algorithm,kadanes-algorithm,C++,Algorithm,Kadanes Algorithm,我想更新最佳开始索引 如果我有一个数组A={-1,-2,5,0,1} 最佳开始应该是索引2和最佳结束索引4我得到了最佳结束,但我不知道如何更新最佳开始 这里的最大子数组是=6(5+0+1)保持潜在的最佳开始索引 void kadane(int A[], int N, int& bestStart, int& bestEnd, int& bestSum) { int max_ending_here = 0; int max_so_far = 0;

我想更新最佳开始索引 如果我有一个数组A={-1,-2,5,0,1} 最佳开始应该是索引2和最佳结束索引4我得到了最佳结束,但我不知道如何更新最佳开始
这里的最大子数组是=6(5+0+1)

保持潜在的最佳开始索引

void kadane(int A[], int N, int& bestStart, int& bestEnd, int& bestSum)
{

    int max_ending_here = 0;
    int max_so_far = 0;
    bestStart = 0;


    for (int i = 0; i < N; i++)
    {

        max_ending_here += A[i];

        if (max_ending_here < 0)
        {
            max_ending_here = 0;
        }
        if (max_ending_here > max_so_far)
        {
            max_so_far = max_ending_here;
            bestEnd = i;
        }

    }
}
bestStartCandidate=0;
if(此处的最大值小于0)
{
此处的最大值=0;
bestStartCandidate=i+1;
}
如果(此处最大值>当前最大值)
{
max_so_far=max_ending_在此;
最佳开始=最佳开始条件;
bestEnd=i;
}

保持潜在最佳启动指数

void kadane(int A[], int N, int& bestStart, int& bestEnd, int& bestSum)
{

    int max_ending_here = 0;
    int max_so_far = 0;
    bestStart = 0;


    for (int i = 0; i < N; i++)
    {

        max_ending_here += A[i];

        if (max_ending_here < 0)
        {
            max_ending_here = 0;
        }
        if (max_ending_here > max_so_far)
        {
            max_so_far = max_ending_here;
            bestEnd = i;
        }

    }
}
bestStartCandidate=0;
if(此处的最大值小于0)
{
此处的最大值=0;
bestStartCandidate=i+1;
}
如果(此处最大值>当前最大值)
{
max_so_far=max_ending_在此;
最佳开始=最佳开始条件;
bestEnd=i;
}

不正确事实上,在得到正确答案之前,我添加了很多if条件。谢谢帮助。不正确事实上,在得到正确答案之前,我添加了很多if条件。谢谢帮助