欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

连续子数组的最大和

程序员文章站 2022-03-24 17:22:26
...

连续子数组的最大和问题

例如:
给一个数组(3, -1, 2, 4)
输出结果为6, 即为2+4

解法一: 暴力求解
对数组内每一个数进行遍历,然后遍历以它们为起点的子数组,比较各个子数组的和,找到和最大的连续子数组

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

// 连续子数组求和的最大值

int arrSum(int* A, int array_length, int* _low, int* _height)
{

    int maxSubArraySum = 0;//子数组的和
    int low;//记录子数组的底, 就是子数组首元素的下标
    int height;//记录子数组的高, 就是子数组的大小
    for (int i = 0; i < array_length; i++)
    {
        for (int j = i; j < array_length; j++)
        {
            int subArraySum = 0;//所遍历出来的子数组的和
            //计算遍历的子数组之和
            for (int k = i; k <= j; k++)
            {
                subArraySum += A[k];
            }
            //找出最大的子数组
            if (subArraySum>maxSubArraySum)
            {
                maxSubArraySum = subArraySum;
                low = i;
                height = j;
            }
        }
    }
    *_low = low;
    *_height = height;
    return maxSubArraySum;
}

int main()
{
    int A[8] = { -6, 10, -5, -3, -7, -1, -1 };
    int array_length = sizeof(A) / sizeof(A[0]);//数组大小
    int low = 0;
    int height = 0;
    int sum = arrSum(A, array_length, &low, &height);
    printf("%d %d %d\n", sum, low, height);
    system("pause");
}

连续子数组的最大和

即 连续子数组的最大和为10, 数组首元素下标为1, 数组大小为1

相关标签: 连续子数组求和