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

    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题