• 题目:返回一个整数数组中最大子数组的和。


    一 题目要求(合并题目)

    1 要求程序必须能处理1000 个元素;
    2 每个元素是int32 类型的;
    3 输入一个整形数组,数组里有正数也有负数。
    4 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    5 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
    6 同时返回最大子数组的位置。
    7 求所有子数组的和的最大值。要求时间复杂度为O(n)。
     
    二 设计思想
       将数组和设置为了auto型变量,和的类型会得到调整,避免了输出的溢出问题;而数组允许首尾相连和最大的情况,可以将for循环语句的出口设置为两倍的数组长度和buffer累加不超过数组长度来得到可靠值
    三 源代码
    #include<iostream>
    #include<time.h>
    #include<conio.h>
    #define N 100000
    using namespace std;
    void RandIn(int IntNum,int A[])//随机生成IntNum个正负数输出五列
    {
    	cout<<"整数内容"<<endl;
    	for(int i=0;i<IntNum;i++)
    	{
    		A[i]=rand()-rand();
    		cout<<A[i];	
    		if(i%5==4)
    			cout<<endl;
    		else
    			cout<<'	';
    	}
    }
    void SelMax(int IntNum,int A[],auto &sum)
    {
    	auto buffer=0;//引入一个常量记录累加的和
    	int count1=0;//buffer进行求和的数值个数
    	int count2=0;//for语句进行的运算次数
    	for(int j=0;j<=IntNum;j++)
    	{
    		if(j==IntNum)
    		{
    			j=0;
    		}
    		buffer+=A[j];
    		count1++;
    		count2++;
    		if(buffer<0)//如果累加和小于0,buffer重新初始化为0
    		{
    			buffer=0;
    			count1=0;
    		}
    		if(sum<buffer)//sum始终记录下存在的最大和
    		{
    			sum=buffer;
    		}
    		if(count1>IntNum||count2>IntNum*2)//如果累加数count1超过IntNum跳出循环,或者语句进行的运算次数超出数组数值的两倍
    		{
    			break;
    		}
    	}
    }
    void main()
    {
    	
    	int IntNum;
    	int A[N];
    	int q=0;
    	while(q==0)
    	{
    		auto sum=0;
    		srand((unsigned)time(NULL));
    		cout<<"请输入整数的个数:";
    		cin>>IntNum;
    		RandIn(IntNum,A);
    		SelMax(IntNum,A,sum);
    		cout<<endl;
    		cout<<sum<<endl;
    		cout<<"是否继续测试(输入0则继续否则停止)";
    		cin>>q;
    		system("cls");
    	}
    }
    

    四 程序截图

    五 结对照片

    六 实验总结

      本次试验进一步加深了对数组的认识,由于只是对前面程序的改善,收获并没有那么多,后面会进行更多的尝试

  • 相关阅读:
    jvm相关参数
    fdisk磁盘分区与挂载
    解决 Redis 只读不可写的问题
    虚拟机linux系统明明已经安装了ubuntu,但是每次重新进入就又是选择安装界面
    linux下更改MySQL数据库存储路径
    消除过期的引用对象
    java避免创建不必要的对象
    Oracle minus用法详解及应用实例
    Mapreduce详解Shuffle过程
    Leet Code 7.整数反转
  • 原文地址:https://www.cnblogs.com/tianma-0/p/4374317.html
Copyright © 2020-2023  润新知