题目描述:
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
注意事项
子数组最少包含一个数
给出数组[−2,2,−3,4,−1,2,1,−5,3]
,符合要求的子数组为[4,−1,2,1]
,其最大和为6
刚开始我想错了,一直朝着怎么找最大值的子数组来做思考,其实是不对的,应该找最大和,数组的内容其实是无所谓的。因为转变思路后,我们就想着怎么获取到子数组的和最大。我们设定一个临时变量temp,在for循环中temp = temp+a[i],如果temp值大于max则重新肤质,max的初始值为数组首元素的值,temp初始值为0.如果想找最大值的数组内容也是可以的,定义一个数组记录元素,当temp小于0就清空数组,最终保留下来的肯定是最大max的数组。
代码如下:
int a[] = {-2,2,-3,4,-1,2,1,-5,3};
int max = a[0];
int temp = 0;
for (int i = 0; i<9; i++) {
temp = temp+a[i];
if (temp>max) {
max = temp;
}
if (temp<0) {
temp = 0;
}
}