java.——最大子序列和(前提是:全部都是非负数)

Posted 给我一个团队,干翻TX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.——最大子序列和(前提是:全部都是非负数)相关的知识,希望对你有一定的参考价值。

直接上代码吧:

情况一:全部是非负数整数的时候,其实非负实数处理也一样。

package Person;

import java.util.Scanner;

public class Main
{
    public static final int maxn = 105;
    public static int[] Arr = new int[maxn];
    public static void main(String[] args)
    {
        int N;
        Scanner cin = new Scanner(System.in);
        N = cin.nextInt();
        for(int i = 0 ; i < N ; i++)
        {
            Arr[i] = cin.nextInt();
        }
        int thissum,maxsum;
        thissum = maxsum = 0;
        for(int i = 0 ; i < N ; i++)
        {
            thissum += Arr[i];//向右累加
            if(thissum > maxsum)
            {
                maxsum = thissum;//更新最大值
            }
            else if(thissum < 0)
            {
                thissum = 0;//若是小于零,则不可能是后面的部分和增大,抛弃它。
            }
        }
        System.out.println(maxsum);
    }
}

 情况二:不确定里边的数是啥类型的。

从以下方面入手:

1.遍历一遍数组,如果全部是负数的时候,找出最大的负数,并把它输出来,结束程序,否则,进到下面的步骤。

2.思路和上面的一样。

代码实现如下:(假设所有的数均为整数)

package Person;

import java.util.Scanner;

public class Main
{
    public static final int maxn = 105;
    public static int[] Arr = new int[maxn];
    public static void main(String[] args)
    {
        int N;
        Scanner cin = new Scanner(System.in);
        N = cin.nextInt();
        int Max = 0;
        for(int i = 0 ; i < N ; i++)
        {
            Arr[i] = cin.nextInt();
            if(i == 0)
            {
                Max = Arr[i];
            }
            else
            {
                Max = Math.max(Max,Arr[i]);
            }
        }
        if(Max < 0)
        {
            System.out.println(Max);
            return;
        }

  //这个是分水岭。
        int thissum,maxsum;
        thissum = maxsum = 0;
        for(int i = 0 ; i < N ; i++)
        {
            thissum += Arr[i];//向右累加
            if(thissum > maxsum)
            {
                maxsum = thissum;//更新最大值
            }
            else if(thissum < 0)
            {
                thissum = 0;//若是小于零,则不可能是后面的部分和增大,抛弃它。
            }
        }
        System.out.println(maxsum);
    }
}

 

代码其实很简单的,如果有不明白的,随时可以留言,24小时在线,谢谢呀

















































































以上是关于java.——最大子序列和(前提是:全部都是非负数)的主要内容,如果未能解决你的问题,请参考以下文章

算法入门:最大子序列和的四种算法(Java)

java---最大连续子数组和(最大子段和)

剑指Offer(Java版)第三十五题:给一个数组,返回它的最大连续子序列的和

求最大和子序列

随机序列的最大连续子序列和的期望

Java实现O(n)最大连续子序列和