我思故我在系列——数据结构题(题目来自july,整理者July,非常感谢!!)

来源:互联网 发布:合肥网站关键词优化 编辑:程序博客网 时间:2024/04/29 17:07
3.求子数组的最大和
题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为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;
}



原创粉丝点击