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

题目是:一维循环的数组求出最大子数组的和

老师刚给出这个题目时 ,求出一维子数组的最大子数组的和,当时我就想原来已经做过一个求出一维数组的最大子数组的和,能不能在此基础上延伸一下,于是我就想怎样利用原来的算法,后来我就想既然是还是求出最大子数组的和肯定原来的东西可以利用。

我想既然是循环,无外乎就是这个数组进行两遍,所以我感觉这样就可以再在这个数组后面申请一个和它长度相同,数的大小和顺序和它一样的数组,这样就起到了循环的目的,于是我就这样进行了,然后再调用原来的方法,这样就可以求出最大子数组的值了。于是我把程序写出来,运行结果发现是错误的。最子数组的和不是原来的不是预期的结果,于是我就想问题出在哪里了,后来我发现了原来问题是最大子数组的长度出现了问题,既然已经把数组的长度扩大一倍,于是子数组的长度可能也会发生变化,这时我就想到需要在子数组的长度上加上一些限制,让他的长度永远小于原来数组的长度,这样很好的解决子数组长度的问题中、这样求出来的子数组就是符合要求的 。

package shengcheng;

import java.util.Scanner;

import org.junit.Test;

public class Xunhuan
{
    @Test
    public  void fun()
    {
        int []a=new int [10];
        int  n;
        Scanner write=new Scanner(System.in);
        System.out.println("请输入要输入的数组的长度");
        n=write.nextInt();
        for(int i=0;i<5;i++){
            a[i]=write.nextInt();
        }
         xunhuan(a,n);

    }

    public void xunhuan(int a[],int n)
    {
        int temp=-200000;
        int Max=-200000;
        for(int i=0;i<n;i++ )
        {
            a[i+n]=a[i];
        }
        for(int i=0;i<n;i++)
        {
           temp=-200000;
           for(int j=i;j<n+i;j++)
           {
             temp+=a[j];
             if(temp>Max)
             {
                 Max=temp;
             }
             if(temp<0)
             {
                 temp=a[j];
             }
           }
        }
        System.out.println(Max);
    }
}

运行结果截图:

时间: 2024-10-04 10:50:15

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

二维数组循环求出最大子数组

package shengcheng; import java.util.Scanner; import org.junit.Test; public class ErweiXunhuan { @Test public void fun() { int [][]a=new int[4][8]; Scanner write=new Scanner(System.in); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { a[i][j]=write.nex

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

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

求最大子数组的和,以及求该最大子数组的起始位置和末尾位置

问题描述: 一个数组,长度为N,数组元素有负有正,如{-1, 4, 6, -3, 7, -3, -3, 9}:我们可以清楚的知道最大的子数组应该是4到9,也就是下标1到下标7,和为17. 求解思路: 第一种方法:我们可以用定义1.两个数ThisSum和MaxSum来记录当前数组的和,以及数组的最大和. 2.我们可以用两个for循环来来遍历数组,每一次求出子数组的最大和,每个子数组从0开始,下一次遍历子数组就是从1开始,以此类推.如第一次就[0~N-1]的最大和,第二次就是[1~N-1],第三次就

求一个最大子数组的和 Ⅲ

要求: • 输入一个整形数组,数组里有正数也有负数. • 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. • 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. • 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思路:核心算法同求一个最大子数组的和Ⅱ相同,将所有数组一遍循环改为无限循环,只需选一个时间跳出即可. 具体代码如下: 1 public static void m

java-第七章-数组-求出一些数的最小值

import java.util.Scanner; public class A04 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); double[] Price = new double[4]; double min = 0; System.out.println("请输入4家店的价格"); for

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

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设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]来做

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

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

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

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

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