每日一题(输入数组大小和数组元素,求数组中连续子数组的最大和)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuxinrenping/article/details/80386659

假设 数组为{-1 ,2 ,3,4,  8,  9,  3,  12,  11, 0}

此时连续数组共有2,3, 4和8,9和12,11.

此时的结果应为23

涉及两个点,因为数组大小为输入的,所以在这就必须要动态开辟数组,即new

代码如下

#include<iostream>
using namespace std;


int main()
{
int n, i;
int *array;
int add = 0;
int addmax = 0;
cin >> n;
cout << endl;
array = new int[n];
for (i = 0; i < n; i++)
{
cin >> array[i];
cout << " ";
}
cout << endl;
i = 0;
while (i < n)
{
int d = i;
while ((array[i] + 1) == array[i + 1] || (array[i] - 1) == array[i + 1])
{
add = add + array[i];
i++;
}
if (d != i)//此时用到d的原因是,要加上连续数组的最后一个元素,可是若是不进内层循环,那么也会执行加操作,在这里为了避免这种情况,若是不进循环,则d和i相等,所以不进循环
{
add = array[i] + add;
}
if (add>addmax)
{
addmax = add;
}
i++;
add = 0;//进行下一次循环,add起始值要设为0;
}
cout << addmax << endl;
delete array;
system("pause");
return 0;

}

代码给大家学习使用,若代码有不足之处,欢迎大家之处,共同学习。

猜你喜欢

转载自blog.csdn.net/wuxinrenping/article/details/80386659
今日推荐