首尾相连最大子数组和(3)
2015-04-16 12:41
176 查看
#include<iostream> using namespace std; #define N 4 void max(int a[],int &s,int &jmin,int &jmax) { int sum=a[0],b=a[0],x=0,y=0; int j=1; while((j-x<N)&&x<N) { if(b>=0) { b=a[j%N]; if(j<N) x=j; else break; } else b+=a[j%N]; if(sum>=b) { sum=b;y=j;} j++; } sum=0; for(int i=y+1;i<x+N;i++) sum+=a[i%N]; s=sum;jmin=y+1;jmax=x+N-1; int z=y%N; if(x>=z) { j=1;sum=a[0];b=a[0];x=0;y=0; while(j<N) { if(b<0) { b=a[j%N];x=j;} else b+=a[j%N]; if(sum<=b) { sum=b;y=j;} j++; } s=sum;jmin=x;jmax=y; } else if((x==0)&&(y==(N-1))) { sum=a[0];b=a[0];x=0;y=0; for(int o=1;o<N;o++) { if(a[o]>sum) {sum=a[o];x=o;y=o;} } s=sum;jmin=x;jmax=y; } } int main() { int a ={0,0,0,0}; cout<<"随机产生数组为:"; for(int i=0;i<N;i++) cout<<a[i]<<" "; cout<<endl; int s=a[0],jmin=0,jmax=0; max(a,s,jmin,jmax); cout<<"相应子数组为:"; cout<<jmin<<endl<<jmax<<endl; for(int i=jmin;i<=jmax;i++) cout<<a[i%N]<<" "; cout<<endl; return 0; }
设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:前两次的程序都有相同的问题,但是两个程序是互补的,所以将两个程序结合,再出现问题,继续改。。。。。。
相关文章推荐
- 首尾相连最大子数组和(2)
- 二维数组最大子数组的和首尾相连
- NYOJ 983 首尾相连数组的最大子数组和(基础dp)
- 题目1527:首尾相连数组的最大子数组和
- 数组的连续子数组最大和(首尾相连)
- 返回一个整数数组中最大子数组的和(数组首尾相连)
- 九度OJ—题目1527:首尾相连数组的最大子数组和
- 首尾相连数组的最大子数组和
- 首尾相连一维数组最大子数组(一)
- 首尾相连二维数组最大子数组和
- NYOJ 44 子串和 && NYOJ 983 首尾相连数组的最大子数组和
- 数组的连续子数组最大和(首尾相连)
- 首尾相连数组的最大子数组和
- nyoj 983首尾相连数组的最大子数组和
- 返回一个首尾相连的二维数组的最大子数组的和
- 返回一个整数数组中最大子数组的和(数组首尾相连)
- nyoj 首尾相连数组的最大子数组和 983 (DP+转换)
- 题目1527:首尾相连数组的最大子数组和-九度
- 首尾相连数组的最大子数组和
- 编程之美2.14 求子数组和的最大值(首尾相连)