zoukankan      html  css  js  c++  java
  • 子数组最大求和(续)

      这次实验的主要设计思路和上次的大框差不多,只是不同的地方就是从文件获取大量的数据和对大型数据的处理,我主要是将文件中的内容读取成了double型,进而使其能处理比较大的数据,但要是想让其处理更大的数据只能将其转化为big型。

    package shuzu;
    
    import java.io.*;
    import java.util.*;
    
    public class shuzu {
        public static void main(String[] args) throws IOException{
            
            String path = "F:\JAVA_2019\shuzu\shuzu.txt";
              double[] nums = writeToDat(path);
              int[] shuzu= new int[nums.length];
              for(int i=0;i<nums.length;i++){
               shuzu[i]=(int)nums[i];
              }
            //时间复杂度没有实现,只是实现了输出最大值
            int nshu;//循环的次数
            int shu[] = {-1,3,-6,-5,-2}; 
            int max = (int)shuzu[0];//存储最大的和
            for(nshu=0;nshu<nums.length;nshu++) {
                int n1 = 0;
                int n2 = 0;
                for(int nnshu=nshu;nnshu<nums.length;nnshu++) {
                    n1 = n1 + shuzu[nnshu];
                    if(nnshu<4) {
                        nnshu = nnshu + 1;
                        n2 = n1 + shuzu[nnshu];
                        max = maxxx(n1,n2,max);
                        nnshu = nnshu - 1;
                    }else {
                        max = maxx(n1,max);
                    }
                }
            }
            System.out.println("最大值" + max);
            System.exit(0);
        }
        
        static int maxxx(int a,int b,int ab) {
            int max;
            if(a<b) {
                max = b;
                if (max<ab) {
                    max = ab;
                }
            }else {
                max = a;
                if(max<ab) {
                    max = ab;
                }
            }
            return max;
        }
        
        static int maxx(int a , int b){
            int max;
            if(a<b) {
                max = b;
            }else {
                max = a;
            }
            return max;
        }
        
        public static double[] writeToDat(String path) {
              File file = new File(path);
              List list = new ArrayList();
              double[] nums = null;
              try {
               BufferedReader bw = new BufferedReader(new FileReader(file));
               String line = null;
               //因为不知道有几行数据,所以先存入list集合中
               while((line = bw.readLine()) != null){
                list.add(line);
               }
               bw.close();
              } catch (IOException e) {
               e.printStackTrace();
              }
              //确定数组长度
              nums = new double[list.size()];
              for(int i=0;i<list.size();i++){
               String s = (String) list.get(i);
               nums[i] = Double.parseDouble(s);
              }
              return nums;
             }
    }

    最后想说的就是虽然能勉强实现处理大数的功能但是对大量数据的处理还没有到理想化,所以还要在优化上下功夫。

  • 相关阅读:
    漫画图解红黑树
    HashMap原理
    从底层原理深度剖析volatile关键字
    一致性哈希算法
    OAuth2.0 授权模式详解
    RocketMQ消息的顺序、重复和事务
    正向代理 vs 反向代理
    JVM内存分配以及存储
    023_JDK8.0新特性<四>StreamAPI_4_Stream终止操作
    022_JDK8.0新特性<四>StreamAPI_3_Stream中间操作
  • 原文地址:https://www.cnblogs.com/hwh000/p/10545328.html
Copyright © 2011-2022 走看看