数组2——数组首尾相接,求最大子数组
2016-03-26 10:46
330 查看
结对开发,我和秦冰超20132900,博客地址 http://www.cnblogs.com/qinxian0/
设计思路:
输入数组 1 -4 -2 7
a[0]=sz[0];1
a[1]=max(a[0]+sz[1],sz[1]);-3
a[2]=max(a[1]+sz[2],sz[2]);-2
a[3]=max(a[2]+sz[3],sz[3]);7
max(a[0],a[1]...a
)
同样要用到数组1的思想,由于可以首尾相连,就转换成分别求{1,-4,-2,7}{-4,-2,7,1}{-2,7,1,-4}{7,1,-4,-2}这几个数组的最大子数组,再求各子数组的和。
设计思路:
输入数组 1 -4 -2 7
a[0]=sz[0];1
a[1]=max(a[0]+sz[1],sz[1]);-3
a[2]=max(a[1]+sz[2],sz[2]);-2
a[3]=max(a[2]+sz[3],sz[3]);7
max(a[0],a[1]...a
)
同样要用到数组1的思想,由于可以首尾相连,就转换成分别求{1,-4,-2,7}{-4,-2,7,1}{-2,7,1,-4}{7,1,-4,-2}这几个数组的最大子数组,再求各子数组的和。
#include<iostream> #include <algorithm> #include<cstdio> #include<vector> using namespace std; int main() { int i,j, szgs,szgs1, maxsum; int sz[100] , a[100];//最大数组 cout << "请输入数组元素个数:"; cin >> szgs; cout << "请输入数组元素:"; for (i = 0; i < szgs; i++) { cin >> sz[i]; } a[0] = maxsum = sz[0]; szgs1 = szgs; if (szgs>0) { for (j = 0; j < szgs; j++) { for (i = j + 1; i < szgs1; i++) { a[i] = max(a[i - 1] + sz[i], sz[i]); maxsum = max(maxsum, a[i]); } sz[szgs1] = sz[szgs1-szgs]; a[j+1] = sz[szgs1-szgs+1]; szgs1 =szgs1+ 1; } } cout << "最大子数组的和为:" << maxsum << endl; }
相关文章推荐
- Google Tag Manager
- 大小端存储模式的理解和判断
- hive与es之间实现数据交互
- cxGrid常用属性设置
- c# 数据库辅助类
- 关于活动中的Button,一直显示不出来。
- Mysql多个LEFT JOIN使用ORDER不能使用索引解决方案
- 面试宝典之阿里巴巴2014校园招聘笔试题
- 面试宝典之阿里巴巴2014校园招聘笔试题
- .net中上传文件到服务器端
- 面试宝典之阿里巴巴2014校园招聘笔试题
- wait 和 sleep 的区别
- 自定义控件三部曲之动画篇(十二)——animateLayoutChanges与LayoutTransition
- android图片浏览器(三)——在对话框上实现图片浏览
- Unity3D asset bundle 格式简析
- 高德地图开发中的坑
- RMI通信
- 机房之功能模块
- 【leetcode】Array——Combination Sum I/II/III
- hdoj 1787 GCD Again (欧拉函数模板 )