数组练习1

Posted 五月的天空

tags:

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

四、实验截图

技术分享技术分享

五、总结

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

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

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

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

js简洁代码片段

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

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

csharp Epicor标准练习片段