返回一个整数数组中最大子数组的和(数组头尾连接)
2015-06-17 19:22
225 查看
1.题目。
题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
2.设计思路。
将随机产生的数连续的存入数组两次,在从第一个开始,分别求出它所有子数组的和,进行比较。求出最大最大子数组。
3.代码。
4.截图
题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
2.设计思路。
将随机产生的数连续的存入数组两次,在从第一个开始,分别求出它所有子数组的和,进行比较。求出最大最大子数组。
3.代码。
#include<iostream> using namespace std; #include <ctime> #include <cstdlib> #define MAX 10000 int main() { int k,a[MAX],b[MAX],m,n=0,p,c,d; cout<<"请输入数组的个数:"<<endl; cin>>k; srand(time(0)); cout<<endl; cout<<"该数组中数字为:"<<endl; for(int i=0;i<k;i++) { a[i+k]=a[i]=rand()%100-50; cout<<a[i]<<" "; } cout<<endl; cout<<endl; for(i=0;i<k;i++) { m=a[i]; b =m; n++; for(int j=i+1;j<i+k;j++) { m=m+a[j]; b =m; n++; } } int max=b[0]; for(i=1;i<n;i++) { if(max<b[i]) { max=b[i]; p=i+1; } } // p=p+1; cout<<"最大子数组的值为:"; cout<<max<<endl; cout<<endl; c=p/k; d=p%k; cout<<"最大子数组为:"; for(i=c;i<c+d;i++) cout<<a[i]<<" "; cout<<endl; return 0; }
4.截图
相关文章推荐
- Masonry介绍与使用实践(快速上手Autolayout)
- 2015数据泄露调查报告
- 用css制作带三角矩形
- Spring2.5 访问 Session 属性的四种策略
- SQL Server 2008 R2 帮助查看器的书签保存位置
- 深入理解JavaIO流
- Lintcode(4)-乱序字符串
- Android学习笔记——MixLayout
- OC7_单词个数
- Python正则表达式操作指南
- Android 拼图游戏知识点小结
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- 【Tools】【版本控制】Git
- Response.Redirect 打开这两种方法的一种新形式
- 排序算法——希尔排序