数组练习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 }

四、实验截图

五、总结

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

转载于:https://www.cnblogs.com/zz0906/p/5316274.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值