题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
#include<iostream>
using namespace std;
int max(int* str,int length);
int main()
{
int num;
int i;
int sum;
int arr[10];
cout<<"请输入创建数组的个数(<=10):"<<endl;
cin>>num;
cout<<"请输入数组的数值:"<<endl;
for(i=0;i<num;i++)
{
cin>>arr[i];
}
sum=max(arr,num);
cout<<"最大子数组和为:"<<endl;
cout<<sum;
return 1;
}
int max(int* str,int length)
{
int i;
int temp=0;
int tempmax=0;
int tempsum=0;
for(i=0;i<length;i++)/*处理数组数值全是负数的情况*/
{
if(tempmax<str[i])
{
tempmax=str[i];
}
}
if(tempmax<0)
{
return tempmax;
}
for(i=0;i<length;i++)
{
if (temp>=0)/*数组中的数值依次相加,并与初始值0相互比较*/
{
temp+=str[i];
}
else/*如果判断结果小于初始值,则舍弃前部分数值*/
{
temp=str[i];
}
if(tempsum<temp)/*初始值为0,及时记入下每次大于0的子数组最大和*/
{
tempsum=temp;
}
}
return tempsum;
}