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

    要求:

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

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

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

    设计思想:

    另设两个数组,一个记录和b[],一个记录当前子数组的个数c[]。如果原数组的第二个数加上第一个数的和小于第二个数,那么舍弃第一个数,当前子数组的个数为一。由此类推,直到遍历完所有数组。

    代码:

    #include<iostream>using namespace std;int max(int a,int b)
    {
       if(a>b)
       {
          return a;
       }
       else
       {
          return b;
       }
    }int maxsum(int a[], int n)
    {
       int i;
       int maxsofar = 0;
       int maxendinghere = 0; 
       for (i = 0; i < n; i++)
       {
          maxendinghere = max(maxendinghere + a[i], 0);
          maxsofar = max(maxsofar, maxendinghere);
       }
       return maxsofar;
    }int main()
    {
       int n, i=0;
       cout<<"请输入个数:";
       cin>>n;
       cout<<"请输入数组:";
       int a[100000]={0};
       for(i=0;i<n;i++)
       {
          cin>>a[i];
       }
       int max=maxsum(a, n);
       cout << "最大子数组的和为:" << max << endl;
       return 0;
    }
     
    运行结果:
    
    
     
    总结:

    通过此次练习,了解了如何使用算法的方法,控制时间复杂度等一些有要求的部分,通过观摩大佬的代码有了新的理解,对算法的作用的理解更加的深刻了,一定要加强算法思维的学习。

  • 相关阅读:
    SharePoint Designer
    SharePoint Tricks
    树型dp(2019/1/19学习笔记) by csy
    2019/2/21测试(noip2015提高组day2
    loj刷题记录2019/2/20
    2019/2/16测试
    splay(水题)
    noip2016提高组day2
    2019/2/13测试(noip2016提高组day1原题)
    洛谷p1083借教室
  • 原文地址:https://www.cnblogs.com/Lhxxx/p/13237751.html
Copyright © 2011-2022 走看看