杭电OJ 1003(C++)

本题每一行输入的数字个数的 1<=N<=100000,如果定义一个大小为100000的数组,空间会极大浪费,所以采用动态数组,根据每组数据的个数建立不同长度的数组。

#include 
using namespace std;

int main()
{
	int n, len;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> len;
		cout << "Case " << i << ":" << endl;
		int* arr = new int[len];

		for (int j = 0; j < len; j++)
		{
			cin >> arr[j];
		}

		int max = arr[0], left = 0, right = 0, tempLeft = 0, tempSum = 0;
		for (int j = 0; j < len; j++)
		{
			tempSum += arr[j];
			if (tempSum > max)
			{
				max = tempSum;
				left = tempLeft;
				right = j;
			}
			if (tempSum < 0)
			{
				tempSum = 0;
				tempLeft = j + 1;
			}
		}
		cout << max << " " << left+1 << " " << right+1 << endl;
		if (i < n)
			cout << endl;

		delete[] arr;
	}

	return 0;
}

注意每组数据计算完成后,要使用 delete 释放为动态数组分配的空间,否则会造成内存泄漏。

继续加油。

你可能感兴趣的:(杭电OJ)