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小时在线,谢谢呀

posted @ 2018-05-15 19:47  给我一个团队,干翻TX  阅读(380)  评论(0编辑  收藏  举报