求数组(元素可为正数、负数、0)的最大子序列和。








#include<iostream>
int get_sub_sum_max(int *arr, int len)
{
	int max, sum;
	max = arr[0]; //max存储最大子数组和
	sum = 0; //判断 一直相加后 是否为负数,若为负数,则会影响后面
	while (len--)
	{
		sum += *arr++; //下一个数组 元素 遇到负数 则清零
		//sum一直加等数组中的元素,若变为负数,则置为零,重新计算
		if (sum >= max)  //当加上一个负数时 max 没有改变 观察后面加许多值后有木有 大于 max的
			max = sum; //max 存储sum 不 是零的数后 ,再与下一轮 sum+arr[i]  后相比
		else if (sum < 0) //当前的和为负数,则影响下一个数 
			sum = 0;
	}
	return max;
}
int main()
{
	// int a[10]={1,-8,6,3,-1,5,7,-2,0,1}; //这个数组 必须结果是 20
	int a[8] = { 1, -2, 3, 10, -4, 7, 2, -5 }; //这个数组 必须 结果是 18 
	// int a[10]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
	printf("%d\n", get_sub_sum_max(a, 8));
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值