zoukankan      html  css  js  c++  java
  • 题目:返回一个整数数组中最大子数组的和

    要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

    思路: 

    如输入1 2 3 4 5 -6  7 -8 9 0

    从1开始逐步向后加,取最大的记为max[0],同时记录下加到第几个数时得到最大值,记位置为k

    从2开始逐步向后加,取最大的记为max[1],同时记录下加到第几个数时得到最大值,记位置为k

    从3开始逐步向后加,取最大的记为max[2],同时记录下加到第几个数时得到最大值,记位置为k

    ......

    比较max[0],max[1],max[2],max[....]取最大的记为max1

    #include <iostream>
    using namespace std;
    #define N 10

    void main(){
    int b[N+1];                                 //把输入的数字存储在数组中
    int max[N] ,max1,n;                    
    int j,k,a,i,g;
    max[200] = 0;max1 = 0;
    cout<<"please input 10 numbers:"<<endl;
    for(j = 0;j<N;j++) cin>>b[j];
    for(j = 0;j < N;j++){
    a = 0;
    for(k = j;k < N;k++){
    a+= b[k] ;
    if(a>max[j]){
    max[j] = a;
    n = k;                                //把k的值赋值给n
    }
    }
    if(max[j]>max1){
    max1 = max[j];
    i = j;
    }
    }
    for(g = i;g < n;g++)
    cout<<"连续数组为: "<<b[g]<<" "<<endl;
    cout<<"连续数组最大的和为"<<max1<<endl;
    }

    时间复杂度为n2

    求最大的和比较容易,主要时间放在了如何把相加和最大的连续数组求出来,关键是如何找到找到相加和最大的连续数组的起止位置。这里用j来表示起始位置,用k来表示止位置

    累计用时两个半小时。。。。

  • 相关阅读:
    疯狂Java讲义-Java基础类库
    第十一届软件类校内模拟赛本科组Java软件开发
    疯狂Java讲义
    疯狂Java讲义-面向对象(下)
    疯狂Java讲义-面向对象(上)
    疯狂Java讲义-流程控制与数组
    疯狂Java讲义-数据类型和运算符
    数据结构-图和图遍历(DFS、BFS)
    A1034 Head of a Gang (30分)
    A1098 Insertion or Heap Sort (25分)
  • 原文地址:https://www.cnblogs.com/laozhanghahaha/p/4357957.html
Copyright © 2011-2022 走看看