本题每一行输入的数字个数的 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 释放为动态数组分配的空间,否则会造成内存泄漏。
继续加油。