数组1

Posted 我心悦你

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组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/

 

以上是关于数组1的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段10—— 数组的响应式方法

js简洁代码片段

JavaScript单行代码,也就是代码片段

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

javascript常用代码片段

JS常用代码片段-127个常用罗列-值得收藏