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组够大的情况下。

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

      这是一千万数组的结果;

        预估结果还在正确范围。

  • 相关阅读:
    docker 应用-1(安装以及基础命令)
    网桥原理及使用
    【年终总结】个人的2019年年终总结
    【bat批处理】批量执行某个文件夹下的所有sql文件bat批处理
    【实用工具】.fbr格式免费播放器 FBR格式 Free FlashBack Player
    【SQL骚操作】SqlServer数据库表生成C# Model实体类SQL语句
    【算法基础】面试过程中遇到的一些算法题输出杨辉三角
    【sql基础】按照名字分组查询时间最早的一条记录
    【面试题】java面试题整理(有空再贴答案)
    【海驾资料】海淀驾校科目三考试资料
  • 原文地址:https://www.cnblogs.com/msdog/p/10543373.html
Copyright © 2011-2022 走看看