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

  • 相关阅读:
    java并发编程——Excutor
    java并发编程——BlockingQueue
    const int *p和int * const p的区别(常量指针与指向常量的指针)
    C语言 enum作为函数返回值及函数参数
    (void)0;
    浅析IAR环境下Flash loader工作原理 (转)
    xilinx zcu106 vcu demo
    flashloader速度提升
    typora--简洁的markdown编辑器
    vivado 2019.2 工程修改文件夹名称后引起的一系列问题
  • 原文地址:https://www.cnblogs.com/674001396long/p/9042729.html
Copyright © 2011-2022 走看看