算法----最大子数组和

这是一道很经典的算法题目,考的烂的不能再烂,还是有很多公司拿它来作为笔试题目,题目不难,这里我给出三种方法。

问题描述:一个整数数组中的元素有正有负,在该数组中找出一个连续子数组,要求该子数组中各元素的和最大,这个子数组便被称作最大子数组。比如数组{2,4,-7,5,2,-1,2,-4,3}的最大子数组为{5,2,-1,2},最大子数组的和为5+2-1+2=8。

方法一:暴力求解方法 利用两个for循环来求解全部所有组合的和,找出其中其中最大的和,代码如下

int find_max_array(const vector<int> &a)
{
	int max_sum = 0;
	for (int i = 0; i < a.size(); ++i)
	{
		int this_sum = 0;
		for (int j = i; j < a.size(); ++j)
		{
			this_sum += a[j];
			if (this_sum>max_sum)
				max_sum = this_sum;
		}
	}

	return max_sum;
}


方法二:通过一遍扫描数组就可以了,记录每次扫描的结果就可以了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值