连续子数组的最大和

连续子数组的最大和问题

例如:
给一个数组(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值