Loading

新最大子数组——数量级和数量无限大

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("\r\n");
            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整形,存在最长数组长度,超出就会溢出,之后修改使用大数类进行存储。

运行截图:

 

posted @ 2019-03-16 18:09  李旭2018  阅读(274)  评论(1编辑  收藏  举报