zoukankan      html  css  js  c++  java
  • 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小时在线,谢谢呀

  • 相关阅读:
    论企业家的修养七“善”(转)
    2009中国企业家新春联谊会
    独步红尘
    诗人的悲哀
    我们恋爱吧
    为妈妈祈福
    向总统学习形像包装!【强烈推荐】
    为了你,我开始学着写诗
    亲爱的,我们去私奔吧
    要做最好的自己:“优化”大脑的22条有效方法
  • 原文地址:https://www.cnblogs.com/674001396long/p/9042729.html
Copyright © 2011-2022 走看看