求数组中最大子数组的和02
2016-03-25 22:01
190 查看
题目:返回一个整数数组中的最大子数组的和
要求:输入一个整形数组,有正数、有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
将数组首尾相连;
同时返回最大子数组的位置。
设计思路:这个题的关键就是如何将环状数组抻直,难点就在于每一个数都可以作为数组的结束,所以,我们想了这么一个办法,例如[A,B,C,D]组成一个环状数组,那么它就可以转换为[A,B,C,D,A,B,C]的一维数组,求环状数组的子数组和的最大值就是求转换后的一维数组的子数组[A,B,C,D]、[B,C,D,A]、[C,D,B,A]以及[D,A,B,C]的和的最大值,因此可以用两个for循环实现。具体代码如下:
测试结果如下:
总结:这次在上次的基础上稍微做了一些修改,两个人一起,思路也多了,但是也会遇到一些问题,比如,两个人意见不一致时,如果用你的思路我就会不高兴,所以,两个人合理的沟通还是很重要的。
时间计划日志:
打算每天抽出晚上两个小时的时间来完成一维数组求子数组和的最大值以及环状数组求子数组和的最大值,而实际上平均一下每个程序所花费的时间并不到两个小时。
缺陷记录日志:
当用户输入不符合要求时,不会报错;当数的值特别大时,运行结果错误,如下图所示:
时间记录日志:
要求:输入一个整形数组,有正数、有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
将数组首尾相连;
同时返回最大子数组的位置。
设计思路:这个题的关键就是如何将环状数组抻直,难点就在于每一个数都可以作为数组的结束,所以,我们想了这么一个办法,例如[A,B,C,D]组成一个环状数组,那么它就可以转换为[A,B,C,D,A,B,C]的一维数组,求环状数组的子数组和的最大值就是求转换后的一维数组的子数组[A,B,C,D]、[B,C,D,A]、[C,D,B,A]以及[D,A,B,C]的和的最大值,因此可以用两个for循环实现。具体代码如下:
//返回一个整数数组中最大子数组的和 //有正数、有负数、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和、将数组首尾相连、返回最大子数组的位置 //张哲、张晓菲 2016/3/22 #include<iostream> using namespace std; #define N 10000 int main() { int num,arr ; int sum=0; cout<<"请输入数组元素个数:"; cin>>num; cout<<"请输入数组元素的值:"; for(int i=0;i<num;i++)//输入环状数组的元素值 { cin>>arr[i]; } for(int i=num;i<(2*num-1);i++)//将环抻直,例如环状数组值原先为[A,B,C,D],那么抻直之后为[A,B,C,D,A,B,C] { arr[i]=arr[i%num]; } cout<<"环抻直之后的数组相当于:"<<endl; for(int i=0;i<(2*num-1);i++) { cout<<arr[i]<<" "; } cout<<endl; int max=arr[0]; int end,start,cstart;//end为结束位置 start为起始位置 //求子数组最大和 for(int j=0;j<num;j++) { sum=0; for(int i=j;i<j+num;i++) { if(sum<=0) { sum=arr[i]; cstart=i;//当前最大子数组的起始位置 } else sum=sum+arr[i]; if(sum>max) { max=sum; start=cstart; end=i; } } } cout<<"子数组和的最大值为:"<<max<<endl; cout<<"最大子数组的起始位置为环抻直后的第"<<start+1<<"个元素,结束位置为环抻直后的第"<<end+1<<"个元素。"<<endl; return 0; }
测试结果如下:
总结:这次在上次的基础上稍微做了一些修改,两个人一起,思路也多了,但是也会遇到一些问题,比如,两个人意见不一致时,如果用你的思路我就会不高兴,所以,两个人合理的沟通还是很重要的。
时间计划日志:
打算每天抽出晚上两个小时的时间来完成一维数组求子数组和的最大值以及环状数组求子数组和的最大值,而实际上平均一下每个程序所花费的时间并不到两个小时。
缺陷记录日志:
当用户输入不符合要求时,不会报错;当数的值特别大时,运行结果错误,如下图所示:
时间记录日志:
相关文章推荐
- maven系列:实践中理解“约定优于配置”
- 【转】 SumaTra PDF 常用快捷键
- 求数组中的最大子数组1
- jQuery on的用法
- Markdown编辑器攻略——字体,字号,颜色
- 查看mysql安装版本
- 生成的API分析文件太大。我们无法在交付前验证您的API使用信息。这只是通知信息。
- Javaweb实训项目中使用到的ajax
- 虚拟机外网不通的一点解决方法
- 快速排序
- iOS9以后 GDataXMLNode修改方式
- Linux学习笔记<三>
- 数据结构——循环单链表和双向链表
- 数据结构实验之链表九:双向链表
- ListView 适配器BaseAdapter配置
- Trick(十三)—— 数学与函数
- 仿知乎日报列表-加载网络数据
- Ubuntu下的抓包工具tcpdump
- 35. Quartz 2D初探
- tcpdump抓取HTTP包