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

    要求:

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

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

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

    发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。

    设计思想:

    首先利用动态数组node[NUM],将这个数组的长度输入,然后再输入数组中的每一个整数值。定义整型summax,将二者都初始化为node[0],sum用于存储子数组中前n项不为零的和,max用于存储最大值。利用for循环,每一次循环中,先判断sum是否小于0,是将node[ i ]的值赋给sum,否则sum=sum+node[ i ],然后判断max的值是否小于sum,是,执行max=sum

    出现的问题:

    一开始看到题目,没有思绪,老师讲过一遍以后也是一头雾水,最后老师说用到的是“动态规划”的知识,上网搜也没有解决问题,最后花了一个多小时结合老师的讲解和网上的资料,勉强将这道题解决了。

    可能的解决方案:

    上网搜资料

    源代码:

     1 //chenchang  20143051  2016.4.5
     2 //返回一个整数数组中最大子数组的和
     3 #include<iostream>
     4 using namespace std;
     5 int main()
     6 {
     7     int NUM;
     8     cout<<"Please input length of array:";
     9     cin>>NUM;
    10     int *node=new int [NUM];
    11     for(int i=0;i<NUM;i++)
    12     {
    13         cout<<i+1<<" input:";
    14         cin>>node[i];
    15     }
    16     //////////
    17     int sum=node[0];
    18     int max=node[0];
    19     for(int i=1;i<NUM;i++)
    20     {
    21         if(sum>0)
    22             sum=node[i]+sum;
    23         else 
    24             sum=node[i];
    25         if(max<sum)
    26             max=sum;
    27     }
    28     cout<<"Max:"<<max<<endl;
    29     delete [] node;
    30     return 0;
    31 }
    View Code

    结果截图:

    图一:

     

    图二:

     

    图三:

     

    总结:

    对于不会的知识点或没搞明白的知识点,可以上网搜索,网上有很多解释,参差不齐,一点要耐心查看。

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/cchjl/p/5369709.html
Copyright © 2011-2022 走看看