zoukankan      html  css  js  c++  java
  • 新最大子数组——数量级和数量无限大

    package shuzu;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.math.BigInteger;
    import java.util.ArrayList;
    public class Test {
        public static void main(String[] args) throws IOException {
            try{
                FileWriter fw =new FileWriter("a.txt");
            //随机数
            for(int i=0;i<10000000;i++) {
                long x=(long)(Math.random()*1000000000)*(Math.random()>0.5?1:-1);
                String y=""+x;
                fw.write(y);
                fw.write("
    ");
                System.out.println(y);
            }
            fw.close();}
            catch(FileNotFoundException e){
                e.printStackTrace();
            }
    
            ArrayList<String> arrList = new ArrayList<>();
            try {
                FileReader fr = new FileReader("a.txt");
                BufferedReader bf = new BufferedReader(fr);
                String st;
                while ((st = bf.readLine()) != null) {
                    arrList.add(st);
                }
                bf.close();
                fr.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        long a[] = new long[arrList.size()];
        for (int i = 0; i <arrList.size(); i++) {
            //数组转移
            String s=arrList.get(i);
            a[i] = (long) Double.parseDouble(s);
            }
        
        long max=a[0];
        long 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);
        }
    }
    View Code

    随机数生成一千万个高位数随机数,进行最大子数组的求和,通过多次测试,两千万个数字会存在溢出的情况,一千万刚好可以输出,运行一次的时间大概在三到四分钟,通过这次的体验,了解到了降低复杂度的重要性。使用了long整形,存在最长数组长度,超出就会溢出,之后修改使用大数类进行存储。

    运行截图:

  • 相关阅读:
    Python(条件判断和循环)
    大端还是小端
    c语言程序设计 字符串拷贝拷贝演变与初衷
    内存 匹配串
    多态 C2
    多态 C1
    判断是否存在不合法字符(C++)
    va_start、vsprintf、va_end
    java中instanceof用法
    c++ vector相关
  • 原文地址:https://www.cnblogs.com/lixv2018/p/10543425.html
Copyright © 2011-2022 走看看