5.5学习总结

发布时间 2023-05-08 10:58:39作者: 听着DJ读童话

算法与数据结构——整数数组求最大子数组

 

题目:

输入一个整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

代码:

#include <iostream>
#include <math.h>

using namespace std;

int nums[] = {2, -3, 4, 5};
//2,-1,4,9
//sum[] = {1, -1, 2, 12, 8, 15, 17, 12};
//数组长度也可以写个函数自己输入
int main()
{
	int dp[4] = {nums[0]};
	//dp[i] = max(dp[i-1] + nums[i], nums[i]);
	for (int i = 0; i < 4; i++)
	{
		dp[i] = max(dp[i - 1] + nums[i], nums[i]);
		//cout << dp[i] << " ";
	}

	//取sum中的最大值
	int Max = dp[0];
	for (int i = 1; i < 4; ++i)
		if (dp[i] > Max)
			Max = dp[i];

	cout << Max;

	return 0;
}

总结:

关键在于,dp[i] = max(dp[i-1] + nums[i], nums[i]);

dp[]表示动态规划数组,得到的是相比较后的最大数组,

该算法利用,动态规划思想,通过比较当前数组位的值,与先前判断过的规划后的数组值加上当前数组位的值,两者比较,最大值留下,从而得到求出整数数组中最大子数组的和。