SoftwareTeacher 2021-01-07 15:44 采纳率: 76.9%
浏览 62

为何最大子数组的和的函数不能正确处理全部是负数的情况?

有下面的函数,返回一个整数数组中 “最大子数组的和” ,max2 为何返回不对呢?

 

//返回一个数组中最大的子数组的和。 

# include <iostream>
# include <stdio.h>
# include <string.h>


int MaxSum(int* arr, int size)
{
    int current = 0;   //current max sum
    int max = current; 

    for (int i = 0; i < size; i++)
    {
        if (current < 0)
            current = 0; 
        current += arr[i]; 
        if (current > max)
            max = current; 
    }
    return max; 
}

int main(void)
{
    char x[40], y[40];

    int a1[5] = { -1, 5, 6, -7, 3 }; 
    int a2[5] = { -5, -4, -8, -1, -10 }; 
    int a3[5] = { -1, 5, 6, -7, 10 }; 

    int max1, max2, max3; 
    max1 = MaxSum(a1, 5); 
    max2 = MaxSum(a2, 5); //这个应该返回 -1, 但是返回 0. 
    max3 = MaxSum(a3, 5);
}
  • 写回答

5条回答 默认 最新

  • bekote 2021-01-07 16:40
    关注

    if (current < 0)current = 0;

    if (current > max)max = current;

    a2最大子数组和是负数,都比0小,那最终max就是等于0

    评论

报告相同问题?

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估