首尾相连最大子数组和(3)

#include<iostream>
using namespace std;
#define Nu 5

int main()
{
    int a[Nu]={1,2,3,-1,4};

    cout<<"随机产生数组为:";
    for(int i=0;i<Nu;i++)
        cout<<a[i]<<"  ";
    cout<<endl;

    int sum=a[0],b=a[0],x=0,y=0;
    int    j=1;
    while((j-x<Nu)&&x<Nu)
    {
        if(b>=0)
        {
            b=a[j%Nu];
            if(j<Nu)
                x=j;
            else
                break;
        }
        else
            b+=a[j%Nu];
        if(sum>=b)
        { sum=b;y=j;}
        j++;
    }
    sum=0;
    for(int i=y+1;i<x+Nu;i++)
        sum+=a[i%Nu];
    int z=y%Nu;
    if(x>z)
    {
        j=1;sum=a[0];b=a[0];x=0;y=0;
        while(j<Nu)
        {
            if(b<0)
            { b=a[j%Nu];x=j;}
            else
                b+=a[j%Nu];
            if(sum<=b)
            { sum=b;y=j;}
            j++;
        }
        cout<<x<<endl<<y<<endl;
        cout<<"相应子数组为:";
        for(int i=x;i<=y;i++)
            cout<<a[i]<<" ";
        cout<<endl;
    }
    else
    {
        cout<<x<<endl<<y<<endl;
        cout<<"相应子数组为:";
        for(int i=y+1;i<x+Nu;i++)
            cout<<a[i%Nu]<<" ";
        cout<<endl;
    }

    cout<<"相邻子数组最大和为:"<<sum<<endl;

    return 0;
}

设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:前两次的程序都有相同的问题,但是两个程序是互补的,所以将两个程序结合,再出现问题,继续改。。。。。。

时间: 2024-10-24 09:56:37

首尾相连最大子数组和(3)的相关文章

首尾相连最大子数组和(2)

#include<iostream> using namespace std; #define Nu 5 int main() { int a[Nu]={2,-2,4,-6,1}; cout<<"随机产生数组为:"; for(int i=0;i<Nu;i++) cout<<a[i]<<" "; cout<<endl; int sum=a[0],b=a[0],x=0,y=0; int j=1; whil

二维数组首尾相连最大子数组

电脑坏了,忘了发了.... 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 将求二维数组最大子数组与一维数组首尾相连求最大子数组结合起来 代码: #include <iostream> #include <cstring> #include <assert.h> const

[经典面试题][淘宝]求首尾相连数组的最大子数组和

题目 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr[n-1],arr[0],-,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入: 输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1<=n<= 100000),表示数组的长度

NYOJ 745 首尾相连数组的最大子数组和

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个

首尾相连的二维数组的最大子数组

一.设计思路:通过综合求二维数组的最大子数组.求首尾相连的一维数组的最大子数组的算法,得出如下思路:首先将二维数组的子数组上下相加转化成许多一维数组,然后按照求首尾相连的一维数组的算法,遍历一维数组的所有子数组,求出子数组的最大值,即为首尾相连二维数组的子数组的最大值,并且在遍历过程中保留取得最大值的位置,输出二维数组的最大子矩阵. 二.代码: import java.awt.Point; import java.util.Scanner; public class main { public

首尾相连的一位数组最大子数组和

题目:在原有的一位数组上进行扩展,求首尾相连的最大子数组的和: 要求: 输入一个一维整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数组,我和我的搭档@快乐的小菜鸟开始了认真的讨论,

nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个

首尾相连的二维数组最大子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

NYOJ 983 首尾相连数组的最大子数组和

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr[n-1],arr[0],-,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个测试用例,