zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和(数组头尾连接)

    1.题目。

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

    2.设计思路。

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

    3.代码。

     1 #include<iostream>
     2 using namespace std;
     3 #include <ctime>
     4 #include <cstdlib>
     5 #define MAX 10000
     6 int main()
     7 {
     8     int k,a[MAX],b[MAX],m,n=0,p,c,d;
     9     cout<<"请输入数组的个数:"<<endl;
    10     cin>>k;
    11     srand(time(0));
    12     cout<<endl;
    13     cout<<"该数组中数字为:"<<endl;
    14     for(int i=0;i<k;i++)
    15     {
    16         a[i+k]=a[i]=rand()%100-50;
    17         cout<<a[i]<<" ";
    18         
    19     }
    20     cout<<endl;
    21     cout<<endl;
    22     for(i=0;i<k;i++)
    23     {
    24         m=a[i];
    25         b[n]=m;
    26         n++;
    27         for(int j=i+1;j<i+k;j++)
    28         {
    29             m=m+a[j];
    30             b[n]=m;
    31             n++;
    32         }
    33     }
    34     int max=b[0];
    35     for(i=1;i<n;i++)
    36     {
    37         if(max<b[i])
    38         {
    39             max=b[i];
    40             p=i+1;
    41         }
    42     }
    43     // p=p+1;
    44     cout<<"最大子数组的值为:";
    45     cout<<max<<endl;
    46     cout<<endl;
    47     c=p/k;
    48     d=p%k;
    49     cout<<"最大子数组为:";
    50     for(i=c;i<c+d;i++)
    51         cout<<a[i]<<" ";
    52     cout<<endl;
    53     return 0;
    54 }

    4.截图

  • 相关阅读:
    SunOS与Solaris系统的对应关系
    多媒体笔记
    【opencv源码解析】 二、 cvtColor
    SSE笔记
    work mark
    mark ubuntu 16.04 64bit + cpu only install mtcnn
    Ubuntu12.04+Caffe (+OpenCV+CPU-only)
    Win32 编程
    抠像的一些问题
    effect
  • 原文地址:https://www.cnblogs.com/xuqingtian/p/4584172.html
Copyright © 2011-2022 走看看