• 最大子数组求和


    两种方法,分别为o(n3)和o(n)

    第一种采用简单的多次遍历,比较,使用了三层for循环,复杂度比较高,为初步构思的结果。

    第二种采用直接一次遍历,第一个正数和出现后,使用max变量进行存储,继续进行遍历,将每次获得的sum都和max进行比较,将max置为最大值,如果sum小于max则不改变,并继续遍历,如果sum出现小于0,则将sum置为0,继续进行遍历,循环直到数组结束。进行了初步验证代码应该正确。

    package shuzu;
    import java.util.Scanner;
    public class Shuzu {
        public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
                int[] a = new int[5];
                // 控制台输入数组值
                for (int i = 0; i < a.length; i++) {
                    System.out.println("请输入第" + (i + 1) + "个数字:");
                    int num = sc.nextInt();
                    a[i] = num;
                }
                int max=a[0];
                sc.close();
                for(int j=0;j<a.length;j++) {
                    for(int k=0;k<a.length;k++) {
                        int sum= 0;
                        for(int l=0;l<a.length;l++) {
                            sum+=a[l];
                        }
                        if(sum>max)    max=sum;
                    }
                }
                System.out.println(max);
                return;
        }
    
    }
    o(n3)
    package shuzu;
    import java.util.Scanner;
    public class shuzu2 {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
                 Scanner sc = new Scanner(System.in);
                    int[] a = new int[20];
                    // 控制台输入数组值
                    for (int i = 0; i < a.length; i++) {
                        System.out.println("请输入第" + (i + 1) + "个数字:");
                        int num = sc.nextInt();
                        a[i] = num;
                    }
                    sc.close();
                    
                    int max=a[0];
                    int sum=a[0];
                    for(int i=1;i<a.length;i++) {
                        if(sum<0)
                            sum=a[i];
                        else 
                            sum+=a[i];
                        if(sum>max)    max=sum;
                    }
                    System.out.println(max);
        }
    
    }
  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/lixv2018/p/10543396.html
Copyright © 2020-2023  润新知