课时作业2

最大子数组是连续的一个或者多个数组,要求的复杂度是O(n)

在数量级与数值范围上做突破,同时要抛出错误,安全退出 

从文件中读取出数组 在课上完成至第二步还需做的是如果输入的数组很大, 并且有很多大的数字, 会产生比较大的结果 (考虑一下数的溢出), 保证程序能正常输出。

package test;

import java.io.*;
import java.util.*;

public class group{
    public static void main(String[] args) throws IOException{
        
        String path = "D:\load\a.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;
         }
}
原文地址:https://www.cnblogs.com/jbwen/p/10548833.html