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

    结对开发实验成员:张晓菲  张哲

    一、本次实验要求:

       返回一个整数数组中最大子数组的和。

    二、设计思想:

        开始时我们的思路便是最笨的,即利用for循环将所有子数组的和求出来,然后找出其最大子数组和输出,但是这样明显不符合O(n)的时间复杂度要求,在课堂听过他人的思路再回来整理后,有了自己的新的思路。

       其实求其最大子数组和也是有一定的规律的,一个子数组求和的过程中当其加上某一个数成负数后则表示其再加下去就没有必要了,反之则继续加下去,每次相加后都要做比比较保留其较大的值,直至循环结束,求出子数组和的最大值。

    三、程序代码

     1 //返回一个整数数组中最大子数组的和
     2 //有正数、有负数、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和、时间复杂度O(n)
     3 //张哲、张晓菲 2016/3/22
     4 
     5 #include<iostream>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int num,*arr;
    11     int sum=0;
    12     cout<<"请输入数组元素个数:";
    13     cin>>num;
    14     arr=new int[num];
    15     if(arr==NULL)
    16     {
    17         cout<<"申请空间失败!"<<endl;
    18         return 1;
    19     }
    20     cout<<"请输入数组元素的值:";
    21     for(int i=0;i<num;i++)
    22         cin>>arr[i];
    23     int max=arr[0];
    24     for(int j=0;j<num;j++)
    25     {
    26         if(sum<=0)
    27             sum=arr[j];
    28         else
    29             sum=sum+arr[j];
    30         if(sum>max)
    31             max=sum;
    32     }
    33     cout<<"子数组和的最大值为:"<<max<<endl;
    34     delete [] arr;
    35     return 0;
    36 }

    四、实验截图

    五、总结

       本次实验其实重在对问题的一个分析与思考,可能一开始大家都会想到一个最简单的方法,即求出所有子数组的和,取其最大,但对于编程来说,这个程序思路其实不是罪简单的,通过对问题的一个全面思考,将其程序简化,相当于用编程的思想去解决遇到的问题,这是本次实验我体会最深的地方。

  • 相关阅读:
    实例模拟struts核心流程
    不同语言下的日期格式化大全
    Android基础之响应Menu键弹出菜单Demo
    c++复习基础要点02 虚函数与模板 与static inline是否共存
    Android listView scroll 恢复滚动位置
    centos本地源搭建——iso
    easy_install和pip区别
    在前台运行Service
    mybatis处理集合、循环、数组和in查询等语句的使用
    java并发库 Lock 公平锁和非公平锁
  • 原文地址:https://www.cnblogs.com/zz0906/p/5316274.html
Copyright © 2011-2022 走看看