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

  • 相关阅读:
    Python阶段复习
    Python阶段复习
    Python学习笔记
    Python爬虫学习
    Python爬虫学习
    Python学习笔记
    史上最全的Maven Pom文件标签详解
    css3 animation动画技巧
    常用的sass编译库
    compass做雪碧图
  • 原文地址:https://www.cnblogs.com/674001396long/p/9042729.html
Copyright © 2020-2023  润新知