一维数组环的最大子数组和

1.实现功能

  实现一个数组环的最大自数字和的计算。   

2.实验思路

  计算最大子数组和:从第一个数开始往后加记录为sum,当sum小于零时,使sum等于零,并继续往后加,取记录的sum的最大值;

  计算最大子数组和,记录,然后把第一个数放到最后,计算最大子数组和,记录,然后再把第一个数放到最后,这样执行n次,取记录和的最大值。 

3.实验代码

package 数组环;

import java.util.Random;
import java.util.Scanner;

public class aa {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a[];
        int Length,sum,max;
        int i,k,j,l;
        //随机产生一个数组
        Scanner scanner = new Scanner(System.in);
        System.out.print("输出随机产生的数组的长度:");
        Length=scanner.nextInt();
        scanner.close();
        a=new int[Length];
        for(i=0;i<Length;i++)
        {
            Random random = new Random();
            a[i]=random.nextInt(19);
            a[i]=a[i]-9;
            System.out.print(a[i]);
            System.out.print(" ");
        }

        l=0;
        for(i=0;i<Length;i++)
        {
            if(a[i]<0)
                l+=1;
        }
        if(l==Length)//如果Length个数均为负数
        {
            max=a[0];
            for(i=0;i<Length;i++)
                if(a[i]>max)
                {
                    max=a[i];
                }
        }
        else
        {
            max=0;
            for(j=0;j<Length;j++)
            {
                k=a[0];
                  for(i=0;i<Length-1;i++)
                  {
                      a[i]=a[i+1];
                   }
                  a[Length-1]=k;
                  sum=0;
                for(i=0;i<Length;i++)
                {
                    sum=sum+a[i];
                    if(sum>max)
                    {
                        max=sum;
                    }
                    if(sum<0)
                    {
                        sum=0;
                    }
                 }
            }
        }

        System.out.println("");
        System.out.print("最大和为");
        System.out.print(max);

    }

}

4.结果截图

时间: 2024-08-24 03:11:38

一维数组环的最大子数组和的相关文章

二维数组环求最大子数组

返回一个二维整数数组中最大联通子数组的和 2015年6月22日 1.题目 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 2.设计思路 参照环状一维数组,将二维数组进行扩展.只将数组的列数扩大为原来的2*n-1,行数不变. 3.源代码 #include <iostream> #include<time.h> using namespace std

一维循环的数组求出最大子数组的和

题目是:一维循环的数组求出最大子数组的和 老师刚给出这个题目时 ,求出一维子数组的最大子数组的和,当时我就想原来已经做过一个求出一维数组的最大子数组的和,能不能在此基础上延伸一下,于是我就想怎样利用原来的算法,后来我就想既然是还是求出最大子数组的和肯定原来的东西可以利用. 我想既然是循环,无外乎就是这个数组进行两遍,所以我感觉这样就可以再在这个数组后面申请一个和它长度相同,数的大小和顺序和它一样的数组,这样就起到了循环的目的,于是我就这样进行了,然后再调用原来的方法,这样就可以求出最大子数组的值

数组之求最大子数组之和(二)

相比第一次 这次数组改编为环形数组 所以最大子数组可以分情况讨论 1.和最大子数组没有跨过数组首尾 此时可以使用上一个程序的方法 2.和最大子数组跨过数组首尾 此时选择 数组总和-最小子数组和得到最大子数组和 最后再将两者进行比较 确定最大的子数组之和 代码如下 1 //可以分两个情况 2 //1.和最大子数组没有跨过数组首尾 3 // 此时可以使用上一个程序的方法 4 //2.和最大子数组跨过数组首尾 5 // 此时选择 数组总和-最小子数组和得到最大子数组和 6 //最后通过比较两个和的大小

LintCode Python 简单级题目 最小子数组和、最大子数组和

题目1 最小子数组 描述: 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 注意事项 子数组最少包含一个数字 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[1, -1, -2, 1],返回 -3 标签 LintCode 版权所有 子数组 贪心 数组 题目2 最大子数组 描述: 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[?2,2,?3,4,?1,2,1,?5,

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做

返回一个二维整数数组中的最大子数组之和(环)

要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 根据前几次所做的关于一维及二维数组的思路,将其整合. 把二维数组转换成一维数组,再用求一维数组最大子数组和(环)的方式求解 1 #include<iostream> 2 #include<cstdio> 3 #include<ctime> 4 using namespac

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出.但我们通过查资料得知int32最大数是2147

软件工程结对开发之求一维数组中连续最大子数组之和2

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,i

5、软件工程结对开发之求一维数组中连续最大子数组之和

一.题目:返回一个二维整数数组中最大子数组的和.二.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 三.设计思想 这个实验是在前几次实验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,要把该数放在数组的最后边,这样循环遍历最后求出最大子数组的和. 四.源代码 1 #include <iostream.h> 2 int