最近看曾经的经典面试题目,现在记录如下:
1、求一个数组的最大子数组和,如此序列1, -2, 3, 10, -4, 7, 2, -5
#include
#include
using namespace
std;
int main()
{
float num[NUM]={0.0};
for(int i=0;i
{
cin>>num[i];
}
float sum=0.0;
float temp=0.0;
for(int i=0;i
{
for(int j=i;j
{
temp+=num[j];
if(temp>sum)
sum=temp;
}
temp = 0.0;
}
cout<<sum<<endl;
system("pause");
}
当然,上述算法的时间复杂度为O(n^2),如果要设计复杂度为O(n)的算法,可用如下:
-
#include
-
#define
n 4 -
-
int
maxsum(int a[n]) -
{
-
int max=a[0]; -
int sum=0; -
for(int j=0;j -
{ -
if(sum>=0) //如果和为正,那么加上 -
sum+=a[j]; -
else -
sum=a[j]; -
if(sum>max) -
max=sum; -
} -
return max; -
}
-
-
int
main() -
{
-
int a[]={-1,-2,-3,-4}; -
cout<<maxsum(a)<<endl; -
return 0; -
}