zoukankan      html  css  js  c++  java
  • 求最大子数组

    要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)

    设计思想:

    数组中有正有负,子数组的和最大值就不一定是元素个数最多的那个子数组。所以开始从0遍历,先求两个元素的子数组的最大值,然后以此类推,通过比较,if判断,把最大值赋给max。

    代码:

    import java.util.Scanner;

    public class shuzu {

        public static void main(String[] args) {     

            Scanner scanner=new Scanner(System.in);

            System.out.println("请输入数字的数量:");

            int n=scanner.nextInt();

            int[] a=new int[n];

            System.out.println("请输入数组的数值:");

            for(int i=0;i<n;i++){

                a[i]=scanner.nextInt();

            }

            for(int i=1;i<n;i++){

                if(a[i]+a[i-1]>a[i])

                    a[i]=a[i]+a[i-1];

            }

            int ans=-1000;

            for(int i=0;i<n;i++)

            {

                if(a[i]>ans)

                    ans=a[i];//找取最大值

            }

            System.out.println(ans);

        }

    }

    截图:

     

     

     

     总结:

    求一个最大子数组和,看似简单,其实不然。通过这个实验,练习了算法。我觉得算法难的地方是思路,思路清晰了写起来会好很多。

  • 相关阅读:
    Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
    Spring 社区的唯一一个国产开源项目
    使用DynamoShake从dynamodb迁移到mongodb
    1754-I Hate It 线段树(单点替换,区间最值)
    1166-敌兵布阵 线段树(单点增减,区间求和)
    P1078 文化之旅
    P1107 最大整数
    521. [NOIP2010] 引水入城 cogs
    P1137 旅行计划
    P2678 跳石头(二分答案)
  • 原文地址:https://www.cnblogs.com/shumouren/p/13090293.html
Copyright © 2011-2022 走看看