SoftwareTeacher 2021-01-07 15:44 采纳率: 83.3%
浏览 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

    评论
  • SoftwareTeacher 《编程之美》作者 2021-01-08 01:58
    关注

    @bekote  

    int current = 0; //current max sum

    改为第一个数组元素,是不是就对了?

    int current = arr[0]; //current max sum

    评论
  • bekote 2021-01-08 09:01
    关注

    if (current < 0)current = 0;有这句你改成第一个数组元素,结果也还是0

    评论
  • bekote 2021-01-08 09:02
    关注

    这个好像要用贪心解,用一个数组,存当前每个位置的最大数组和

     

    评论
  • SoftwareTeacher 《编程之美》作者 2021-01-08 16:39
    关注

    最大子数组的和即使是负数, 也是正常的啊。  没有规定说数值的和必须大于 0 . 

    评论

报告相同问题?

悬赏问题

  • ¥20 matlab报错,vflux计算潜流通量
  • ¥15 自己编写函数strlen(), strcpy(), strcmp(), strcat(), 没有编写main(),为什么测评结果都是错的,哪里出了问题
  • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
  • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
  • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
  • ¥15 求解icon library .icl图标库文件
  • ¥15 VB.NET 父窗体调取子窗体报错
  • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
  • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?
  • ¥15 在我想检测ros是否成功安装时输入roscore出现以下