• 返回一个整数数组中最大子数组的和(数组头尾连接)


    1.题目。

    题目:返回一个整数数组中最大子数组的和。
    要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
    同时返回最大子数组的位置。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。

    2.设计思路。

    将随机产生的数连续的存入数组两次,在从第一个开始,分别求出它所有子数组的和,进行比较。求出最大最大子数组。

    3.代码。

    #include<iostream>
    using namespace std;
    #include <ctime>
    #include <cstdlib>
    #define MAX 10000
    int main()
    {
        int k,a[MAX],b[MAX],m,n=0,p,c,d;
        cout<<"请输入数组的个数:"<<endl;
        cin>>k;
        srand(time(0));
        cout<<endl;
        cout<<"该数组中数字为:"<<endl;
        for(int i=0;i<k;i++)
        {
            a[i+k]=a[i]=rand()%100-50;
            cout<<a[i]<<" ";
            
        }
        cout<<endl;
        cout<<endl;
        for(i=0;i<k;i++)
        {
            m=a[i];
            b[n]=m;
            n++;
            for(int j=i+1;j<i+k;j++)
            {
                m=m+a[j];
                b[n]=m;
                n++;
            }
        }
        int max=b[0];
        for(i=1;i<n;i++)
        {
            if(max<b[i])
            {
                max=b[i];
                p=i+1;
            }
        }
        // p=p+1;
        cout<<"最大子数组的值为:";
        cout<<max<<endl;
        cout<<endl;
        c=p/k;
        d=p%k;
        cout<<"最大子数组为:";
        for(i=c;i<c+d;i++)
            cout<<a[i]<<" ";
        cout<<endl;
        return 0;
    }

    4.运行结果。

    5.体会。

    结对开发可以加快编程速度,更快、更好的完成实验编程。

     6.照片。

     
  • 相关阅读:
    罗振宇 知识就是力量之怎样做一个不冲动的人
    C++中stl的map
    stl中顺序性容器,关联容器两者粗略解释
    stl之容器、迭代器、算法几者之间的关系
    mysql技术内幕之常规使用
    essential c++ 第一章 array及vector相关使用
    由函数clock想到的
    编程获得CPU的主频
    Markdown 基本语法
    Future FutrueTask Callable类源码说明以及原理使用
  • 原文地址:https://www.cnblogs.com/nulidexuezha/p/4378485.html
Copyright © 2020-2023  润新知