找出一个个既有正数又有负数的数组中子数组的和的最大值

该博客介绍了一种方法来找出一个数组中,包含正数和负数的子数组的最大和。通过维护一个累计和变量`sum`,当遇到负数时,若当前`sum`大于已知的最大和`MaxSum`,则更新`MaxSum`。如果`sum`加上当前元素小于等于0,说明之前的子数组对后续部分产生负面影响,此时将`sum`重置为0,继续寻找新的子数组。最终,`MaxSum`即为最大和。
摘要由CSDN通过智能技术生成


//思路:设前面k项之和为sum(最开始时k为0),将k+1开始的项逐项加到sum中,注意在这个过程中如果出现了负数则需要对当前的sum值保存一次了,因为负数会拖后腿的;如果sum的值已经小于0,则可以认为前面的项之和在拖后面的子数组的后腿,在这种情况下可以撇开前面的子数组 将sum值赋值为0,重新寻找子数组。

#include<stdio.h>

int MaxSum;

void FindMax(int*res,int len);

int main()
{
 int n,group[1000];
 scanf("%d",&n);

 for (int i=0;i<n;i++)
 {
  scanf("%d",&group[i]);
 }

 MaxSum=0;
 FindMax(group,n);
 printf("%d\n",MaxSum);
 return 0;
}

void FindMax(int*res,int len)
{
 int sum=0;
 for (int i=0;i<len;i++)
 {
  if (res[i]<0)
  {
   if (sum>MaxSum)
   {
    MaxSum=sum;
   }
  }

  if (sum+res[i]<=0)
  {
   sum=0;
  }
  else
  {
   sum+=res[i];
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值