求最大子数组问题

题目:给定一个数组,求子数组中最大和,要求子数组中元素在原数组中是连续的。如数组{2,-1,3,5,-2}中{2,-1,3,5}为和最大子数组。
思路:这道题是简单的动态规划问题,递推公式为sum = sum + arr[i] > arr[i] ? sum + arr[i] : arr[i]
关键是若要与后面的元素组成一个新的子数组,自身不能为负数,不然还不如从arr[i]开始作为子数组的头。
int GetMaxArr(vector<int> arr) {
	int max = INT_MIN;
	int sum = arr[0];
	for (int i = 1;i <arr.size();i++) {
		sum = sum + arr[i] > arr[i] ? sum + arr[i] : arr[i];
		if (sum > max) max = sum;
	}
	return max;
}

猜你喜欢

转载自blog.csdn.net/lccrun/article/details/80876616