题目
思路
从左往右进行遍历,进行累加,同时进行判断
当,当前的sum出现小于0 的情况时,前面那一串都不要了,从当前位置开始累加
当,sum依然>0时,说明继续加下去是可能得到更大的值,所以继续加下去
从中不断比较max_sum 最终就能得到最大值
代码
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<stack>
using namespace std;
void printArr(int N);
void scanfArr(int N);
int arr[1000];
const int INF = 0x3f3f3f3f;
int main(){
int N = 7;
scanfArr(N);
printArr(N);
int max_sum = 0;
int sum = 0;
for (int i=0;i<N;i++){
if(sum<0) sum=arr[i];
else sum += arr[i];
max_sum = max(max_sum,sum);
}
printf("%d\n",max_sum);
printArr(N);
return 0;
}
void randArr(int N){
srand((int)time(0));
for(int i=0;i<N;i++){
arr[i] =rand()%11-5; //[-5,5];
}
}
void printArr(int N){
for(int i=0;i<N;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
void scanfArr(int N){
for(int i=0;i<N;i++){
scanf("%d",&arr[i]);
}
}