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");

    }
    }

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

  • 相关阅读:
    python的复制,深拷贝和浅拷贝的区别(转)
    linux下ffmpeg安装(转)
    Linux下的tar压缩解压缩命令详解(转)
    centos7安装python-pip(转)
    爬山算法和模拟退火算法简介
    协方差、协方差矩阵定义与计算
    七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
    Canny边缘检测算法原理及其VC实现详解(二)
    Canny边缘检测算法原理及其VC实现详解(一)
    perforce变量配置与使用
  • 原文地址:https://www.cnblogs.com/zhang12345/p/10614929.html
Copyright © 2011-2022 走看看