zoukankan      html  css  js  c++  java
  • 数组

    设计思想:利用循环的方式逐一求出数组中包含的每个子数组,然后求出数组的和进行比较,求出子数组和的最大值
    遇到的问题:这样求出的子数组和的最大值时间复杂度并没有达到O(n)的要求,后来通过课上的讨论,对于一个有正有负的数组,在我们进行遍历的时可以先找出第一个数,如果遍历的第一个数是负数就舍去直到数为正,然后进行累加看数是否小于零,如果小于0就进行新的累加。代码如下:
     
     
     package geren02;
    import java.util.Scanner;

    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.InputMismatchException;

    public class Wenjian
    {
    public static void main(String[] args)
    {
    long start = System.currentTimeMillis();

    int LENGTH=100000000;//数量
    int FANWEI=10000;//   n  :    -n   ~   +n
    int inum;
    int j=0;
    int m=0;
    int i=0,r=0,k=0;

    String snum="";
    String fileName="number.txt";
    int [] num=new int[LENGTH];
     int array[]=new int[LENGTH];
     long maxsum=array[0];
         long maxstart=array[0];

    try
    {
    File f=new File(fileName);
    if(!f.exists())
    {
    throw new Exception("文件"+fileName+"不存在");
    }
    //写入
    FileWriter fw=new FileWriter(f);
    PrintWriter pw=new PrintWriter(fw);
    for(r=0;r<10;r++)
    {
    for( k=0;k<LENGTH;k++,m++)
    {
    inum=(int)(1+Math.random()*FANWEI*2)-FANWEI;
    pw.print(inum+" ");
    if(m==20)
    {
    pw.print(" ");
    m=0;
    }
    }
    pw.flush();
    }


    //读取

    FileReader fr=new FileReader(f);
    Scanner in=new Scanner(fr);
    if(!in.hasNext())
    {
    throw new Exception("文件"+fileName+"内容为空");
    }
    while(in.hasNext())
    {

    /*if(j>=LENGTH)

    {
    System.out.println("数字过多,多于"+LENGTH+"将不予读取");
    break;
    }*/
     if(maxstart<0)
                {
                    maxstart=0;
                }
                maxstart+=in.nextInt();
                if(maxstart>=(Long.MAX_VALUE/2-1)||maxstart<=(Long.MIN_VALUE/2-1))
                {
                 throw new Exception("数字过大溢出");
                }
                if(maxstart>maxsum)
                    maxsum=maxstart;
    j++;
    }

           
            System.out.println("答案为: "+maxsum);

    }
    catch(InputMismatchException e2)
    {
    System.out.println("数字过大或输入格式不对");
    }
    catch(Exception e)
    {
    System.out.println("错误于: "+i);
    System.out.println("错误!!!");
    System.out.println(e.getMessage());
    e.printStackTrace();
    }


    long end = System.currentTimeMillis();
    System.out.println("程序运行时间:"+(end-start)+"ms");

    }
    }

    总结:这次是第一次的课堂测试,通过上课的讨论了解了大要如何做,所以最开始的设计很重要,以后要先想好在编程。

  • 相关阅读:
    golang语言中os/signal包的学习与使用
    golang语言中os/exec包的学习与使用
    go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求
    go语言使用go-sciter创建桌面应用(六) Element元素操作和Event事件响应
    go语言使用go-sciter创建桌面应用(五) 加载元素资源
    go语言使用go-sciter创建桌面应用(四) 固定窗口大小
    go语言使用go-sciter创建桌面应用(三) 事件处理,函数与方法定义,go与tiscript之间相互调用
    go语言使用go-sciter创建桌面应用(二) ui元素查找,增加,删除,修改
    go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui
    go语言net包rpc远程调用的使用
  • 原文地址:https://www.cnblogs.com/zhang12345/p/10614929.html
Copyright © 2011-2022 走看看