• 课时作业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;
             }
    }
  • 相关阅读:
    c语言面试
    汇编面试基础
    求余符号的用法
    ++a和a++的一点不同
    OVER子句
    SQL执行计划解析(1) 执行计划基础
    sql 排序规则 chinese_prc_ci_as
    SQL执行计划解析(2) 基本查询的图形执行计划
    过sql_trace跟踪得到了该SQL的执行计划,如何看懂执行计划
    JS日历控件集合附效果图、源代码
  • 原文地址:https://www.cnblogs.com/jbwen/p/10548833.html
Copyright © 2020-2023  润新知