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

      先看看代码吧。

     

     1 package classTestOne;
     2 
     3 import java.io.*;
     4 import java.io.FileNotFoundException;
     5 import java.io.FileReader;
     6 import java.io.FileWriter;
     7 import java.io.IOException;
     8 import java.math.BigInteger;
     9 import java.util.ArrayList;
    10 
    11 public class Two {
    12     public static void main(String[] args) throws IOException {
    13         /*
    14          * 2.文件读取,很大的树,较大的结果,参数错误,自动退出
    15          */
    16         // 2文件写入
    17         /**/
    18         try {
    19 
    20             FileWriter fw = new FileWriter("one.txt");
    21             BufferedWriter bw = new BufferedWriter(fw);
    22             for (int i = 0; i < 10000000; i++) {
    23                 int n = (int) (Math.random() * 100);
    24                 BigInteger big=BigInteger.valueOf(n);
    25                 String s = n + "";
    26                 bw.write(s); 
    27                 bw.newLine(); 
    28             }
    29             bw.close();
    30             fw.close();
    31         } catch (FileNotFoundException e) {
    32             // TODO Auto-generated catch block
    33             e.printStackTrace();
    34         }
    35         // 2文件读取
    36 
    37         ArrayList<String> arrList = new ArrayList<>();
    38         try {
    39             FileReader fr = new FileReader("one.txt");
    40             BufferedReader bf = new BufferedReader(fr);
    41             String st;
    42             while ((st = bf.readLine()) != null) {
    43                 arrList.add(st);
    44             }
    45             bf.close();
    46             fr.close();
    47         } catch (FileNotFoundException e) {
    48             // TODO Auto-generated catch block
    49             e.printStackTrace();
    50         }
    51         // 长度
    52         int len = arrList.size();
    53         int a[] = new int[len];
    54         for (int i = 0; i < len; i++) {
    55             // 数组转移
    56             String s = arrList.get(i);
    57             System.out.println(s);
    58             a[i] = Integer.parseInt(s);
    59         }
    60 
    61         System.out.println(large(a, len)); // 打印最大子数组
    62 
    63     }
    64 
    65     private static int max(int a, int b) {
    66         if (a > b)
    67             return a;
    68         else
    69             return b;
    70     }
    71 
    72     private static int large(int a[], int n) {
    73         int max = a[0];
    74         int max2 = 0;
    75         for (int i = 0; i < n; i++) {
    76             max2 = max(max2 + a[i], a[0]); // 几个连续最大的值
    77             max = max(max, max2); // 目前为止最大值
    78         }
    79         return max;
    80     }
    81 }

      根据需求,数组够长,元素够大(还在改进中)。

      首先,生成一个足够长的数组,用到随机生成函数,在进行多次循环在n组够大的情况下。

      读入文件,再从文件读出,根据上次写的代码将这些数进行求和计算比较求得最大子数组。

      这是一千万数组的结果;

        预估结果还在正确范围。

  • 相关阅读:
    网页制作初期,必须的东西
    网页制作知识100问(五)
    打開新窗口
    [转]如何用Delphi开发网游外挂
    钩子技术
    [转]计算两点间的角度
    [转]快速寻找子位图的位置
    (转)Delphi读写UTF8、Unicode格式文本文件
    GridView中控件列使用方法小结
    ASP.NET2.0 生成Word 2007并下载方案
  • 原文地址:https://www.cnblogs.com/msdog/p/10543373.html
Copyright © 2011-2022 走看看