FindMaxSubArray

#include <iostream>

using namespace std;

struct MaxSubArray

{

    int low;

    int high;

    int sum;

    MaxSubArray(int InLow, int InHigh, int InSum)

    {

        low = InLow;

        high = InHigh;

        sum = InSum;

    }

};

MaxSubArray FindCrowwMaxSubArray(int list[], int low, int mid, int high)

{

    int Sum = 0;

    int LeftMax = -1000000000;

    int LeftIndex = mid;

    for (int i = mid; i >= low; i--)

    {

        Sum += list[i];

        if (Sum > LeftMax)

        {

            LeftMax = Sum;

            LeftIndex = i;

        }

    }

    Sum = 0;

    int RightMax = -1000000000;

    int RightIndex = mid + 1;

    for (int i = mid + 1; i <= high; i++)

    {

        Sum += list[i];

        if (Sum > RightMax)

        {

            RightMax = Sum;

            RightIndex = i;

        }

    }

    return MaxSubArray(LeftIndex, RightIndex, LeftMax + RightMax);

}

MaxSubArray FindMaxSubArray(int list[], int low, int high)

{

    if (low == high)

    {

        return MaxSubArray(low, high, list[low]);

    }

    else

    {

        int mid = (low + high) / 2;

        MaxSubArray LeftMaxSubArray = FindMaxSubArray(list, low, mid);

        MaxSubArray RightMaxSubArray = FindMaxSubArray(list, mid + 1, high);

        MaxSubArray CrossMaxSubArray = FindCrowwMaxSubArray(list, low, mid, high);

        if (LeftMaxSubArray.sum > RightMaxSubArray.sum && LeftMaxSubArray.sum > CrossMaxSubArray.sum)

        {

            return LeftMaxSubArray;

        }

        else if (RightMaxSubArray.sum > LeftMaxSubArray.sum && RightMaxSubArray.sum > CrossMaxSubArray.sum)

        {

            return RightMaxSubArray;

        }

        else

        {

            return CrossMaxSubArray;

        }

    }

}

MaxSubArray FindMaxCrossSubArray(int list[], int low, int mid, int high)

{

}

int main()

{

    int ShareClosedPrice[15] = {32, 52, 1, 48, 65, 25, 43, 9, 16, 73, 56, 89, 106, 27, 35};

    int DifferenceList[14];

    for (int i = 1; i < sizeof(ShareClosedPrice) / sizeof(int); i++)

    {

        DifferenceList[i - 1] = ShareClosedPrice[i] - ShareClosedPrice[i - 1];

    }

    cout << "DifferenceList: ";

    for (int i = 0; i < sizeof(DifferenceList) / sizeof(int); i++)

    {

        cout << DifferenceList[i] << ", ";

    }

    cout << endl;

    MaxSubArray MaxSubList = FindMaxSubArray(DifferenceList, 0, 13);

    cout << "MaxSubList: " << MaxSubList.low <<" , " << MaxSubList.high<<" , "<<MaxSubList.sum;

    cout << endl;

    getchar();

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值