连续子数组的最大和
程序员文章站
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