zoukankan      html  css  js  c++  java
  • 数组1

    题目:

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

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

    求所有子数组的和的最大值。要求时间复杂度为O(n)

    设计思想:
    子数组求最大和的话,如果数组中既有整数也有负数,那么最大值一定不能是负数,所以如果所求和小于0的话就抛弃,如果为正则继续累加,而且只有当当前的数字为正时,此时的求和才能是目前的最大值。考虑到都为0的情况,则必须在其中找到最大值,不能为0

    //禹慧慧 吕兰兰  2016.3.23
    //求一个数组中最大子数组的元素之和
    #include<iostream>
    using namespace std;
    int main()
    {
    int a[100],N;//数组元素个数
    int sum=0,max=0;
    cout<<"请输入数组元素个数:";
    cin>>N;
    cout<<"请输入"<<N<<"个数:";
    for(int i=0;i<N;i++)
    cin>>a[i];
    for(int i=0;i<N;i++)
    {
       sum+=a[i];//求和
       if(a[i]>=0)
      {
         if(max<sum)
        {
           max=sum;//赋值给最大和
        }
      }
       if(sum<0)
       {
           sum=0;
       }
    }
    if(max==0)//数组元素都为负数的情况
    {
        max=a[0];
        for(int i=1;i<N;i++)
        {
          if(a[i]>max)
          max=a[i];
        }
    }
    cout<<"最大子数组和为:"<<max<<endl;
    return 0;
    }
    

      运行结果:

    总结:

    这道题难得不在于结果的实现,难点在时间复杂度,如果不规定时间复杂度的话,只要使用循环嵌套很容易实现,但是时间复杂度为O(n),那么只能使用一层嵌套,然后通过选择语句进行比较、赋值,不过一定要记得考虑极端情况。

    组成员吕兰兰网址:http://www.cnblogs.com/lvlan/

  • 相关阅读:
    最短路径BellmanFord , Dijsktra
    minhash
    eclipse 中使用tomcat
    http 服务
    MongoDB小记
    java post 请求
    hadoop拾遗(五)---- mapreduce 输出到多个文件 / 文件夹
    weka数据挖掘拾遗(二)---- 特征选择(IG、chi-square)
    weka数据挖掘拾遗(一)---- 生成Arff格式文件
    基于SimHash的微博去重
  • 原文地址:https://www.cnblogs.com/yhhzxcvbnm/p/5322953.html
Copyright © 2011-2022 走看看