zoukankan      html  css  js  c++  java
  • 返回一个整数数组(环形数组)中最大子数组的和

    一、实验题目

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

      要求:

           输入一个整形数组,数组里有整数也有负数。

           数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

           如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],……A[n-1]A[0]……A[j-1]之和最大。

           同时返回最大子数组的位置。

      求所有子数组的和的最大值。要求时间复杂度为On.

     

    二、实验思路

      由于这次所要求的子数组相当于一个环形的数组,所以就想到了类似数字右循环的形式来解决这个题目。(其实主要思想是参考的课堂上一个同学的思想)

      下面我用一个例子来说明一下我们的解题思路:

      例如,我输入的数组是{5-3,2-1}第一次循环求得5,和max比较大小,然后把5+-3)和max比较大小,然后是5+-3+2max比较大小,最后是5+-3+2+-1)和max比较大小,把最大值给max,接下来把5移到-1的后面,再用同样的方法求第二次循环的最大值,只不过这次开始于-3。依次类推,求出最大的子数组。

      由于我和小伙伴编程不是太好,所以返回最大子数组的位置这一个要求没有实现。

    三、源代码

     1 // 信1201-2班 司新红 万彤
     2 #include"stdafx.h"
     3 #include "iostream"
     4 using namespace std;
     5 
     6 /*主函数*/
     7 int main()
     8 {
     9     int length;//定义数组长度length
    10     int n;//定义变化后的数组的长度
    11     cout<<"请输入数组元素个数:"<<endl;
    12     cin>>length;
    13     n=2*length;
    14     int* a=new int[n];//初始化数组
    15     cout<<"请输入数组中的元素:"<<endl;
    16     for(int i=0;i<length;i++)
    17     {    
    18         cin>>a[i];
    19     }
    20     int max=a[0];
    21     int s=0;//定义求和后的元素
    22      for(int i=0;i<length;i++)
    23      {
    24         s=0;
    25         for(int j=i;j<length+i;j++)
    26         {
    27             s=s+a[j];
    28             if(s>max)
    29             {
    30                 max=s;
    31             }
    32         }
    33         a[length+i]=a[i];                                //每次将已经计算过的数放到最后
    34      }
    35      cout<<endl;
    36      cout<<"最大子数组的和为:"<<endl;
    37      cout<<max<<endl;
    38 
    39     return 0;
    40 }

    四、运行结果

    五、心得体会

        这次的程序,在我刚刚看到的时候,简直一点思路都没有,所以最后采取的课堂上一个同学的思路,在编程的过程中我们还遇到了许多的问题,比如不知道如何把第一个数字移到数组的最后面,后来经过问同学,和我们自己的研究终于得到了解决。虽然我和我的小伙伴都不太会编程,但是我们还是努力完成了这个题目,也许这就是一点点的进步吧,在以后的过程中,我们会再接再厉,争取能够独立完成一个程序。

     

    附上我和我的小伙伴的照片:

  • 相关阅读:
    谈谈vertical-align的text-bottom和text-top
    【golang】代码学习
    【golang】json相关:unmarshal
    【tidb】相关的调研
    【php】sort函数整理
    【hive学习笔记1】-开始
    python2和python3区别
    python: 类型转换(int,long,float->string)
    【java】查找应用程序的资源
    【java】已经学习的部分
  • 原文地址:https://www.cnblogs.com/zgsxh/p/4376505.html
Copyright © 2011-2022 走看看