求子序列的最大和

这是数据结构老师布置的第七道题,题目要求如下:

求子序列的最大和

具体实现思路:

声明一个sum变量代表当前已经得到的和,声明一个max代表当前最大的和,每次先让sum累加,然后比较sum是否小于零,如果小于零,则直接将sum归零,进行下一次累加。然后比较sum和max大小,如果sum比max大,更新max的值。最后便得出max的值。

代码如下:

#include"pch.h"
#include<iostream>
#include<vector>
using namespace std;

int biggestSum(vector<int> input)
{
	if (input.size() == 0)
		return 0;
	if (input.size() == 1)
		return input[0];
	int max = 0;
	int sum = 0;
	for (int i = 0; i < input.size(); i++)
	{
		sum += input[i];
		if (sum < 0)
		{
			sum = 0;
		}
		else if (sum > max)
			max = sum;
	}
	return max;
}
int main()
{
	vector<int> input;
	int n;
	cout << "Enter the quantity of the numbers: ";
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		int temp;
		cin >> temp;
		input.push_back(temp);
	}
	cout << "The biggest sum is " << biggestSum(input) << endl;
}

 

运行结果:

求子序列的最大和