复习算法的时候,遇到了最大子阵列的题。
我心说还有这么经典的题目等着我蹂躏?
心花怒放地写完了代码。
居然没有AC!!!
然后发现,这里面还是有些坑的。
主要就是负数的处理上。
话不多说,上代码。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n=0;
cin>>n;
long long int add=0;
long long int max=0;
bool is_neg=true; //标记判断所有的数是不是全为负数
long long int neg = 0;
int tmp =0;
cin>>tmp; //在这里先输入第一个数
neg = tmp;
for(int i=1;i<n;i++){
if(tmp>0) // 这里判断每个输入的数是不是全为负数
is_neg = false;
cin>>tmp;
if(tmp>neg) // 这里遍历获得所有输入的数字中最大的数 这是针对所有的数组元素都是负数的情况
neg=tmp;
if(add<0)
add=0;
add+=tmp;
if(add>max)
max=add;
}
if(is_neg) //如果所有输入的数字都是负数,则直接输出这一负数
cout<<neg;
else
cout<<max;
return 0;
}
都是泪。