本文主要是介绍计蒜客题目 最大子阵列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在一个数组中找出和最大的连续几个数。(至少包含一个数)
例如:
数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6.
输入格式
第一行输入一个不超过1000的整数n。
第二行输入n个整数A[i]。
输出格式
第一行输出一个整数,表示最大的和。
样例输入
3
1 1 -2
样例输出
2
#include<stdio.h>int main()
{int sum=0,max=0;int n;scanf("%d",&n);int a[n];for(int i=0;i<n;i++) scanf("%d",&a[i]);max=a[0];for(int i=0;i<n;i++){sum+=a[i];if(max<sum) max=sum;else if(sum<0) sum=0;}printf("%d",max);return 0;
}
想了半天也没想到怎么做,参考了别人的做法,我实在有点不开窍。
思路:
用max保存当前数组计算出的最大值,不断往子数组里面增加新的数。如果没有超过最大值,那么最大值就是最大,如果超过,更新最大值。如果加新的数的时候发现sum<0了,那么重新开始。(因为sum<0只能给后续带来伤害而没有帮助)
这篇关于计蒜客题目 最大子阵列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!