要求:

  要求数组从文件读取。
  如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
  另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

解决方法及步骤:

  1,先写入一个txt文件,再读取出来

  2,通过循环测试生成的最大容量的数。

  3,写入文件时控制数字的大小,就不会产生大数情况。

  4,再加上上次的代码,计算最大连续子数组的和

  

代码:

  这是随机生成一定量的数并且写入文件

package pri.xcl.test0314;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Random; public class addtxt { public static void main(String[] args) {
//文件写入
try {
int a= Integer.MAX_VALUE;
int b= Integer.MIN_VALUE;
System.out.println(a);
System.out.println(b);
BufferedWriter out = new BufferedWriter(new FileWriter("1.txt"));
//随机写入100个数
for(int i=0;i<30000000;i++) {
// int x=(int) (Math.random()*10);
int smallistNum=-1000;
int BiggestNum=1000; int x=getRandomNum(smallistNum, BiggestNum);
out.write(x+"\r\n");
}
out.close();
System.out.println("文件创建成功!");
} catch (IOException e) {
} } // 获得一个给定范围的随机整数
public static int getRandomNum(int smallistNum, int BiggestNum) {
Random random = new Random();
return (Math.abs(random.nextInt()) % (BiggestNum - smallistNum + 1))+ smallistNum;
}
}

  读取文件和求最大字数组之和

package pri.xcl.test0314;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; public class test {
public static int[] StringToInt(String[] arrs){ int[] ints = new int[arrs.length]; for(int i=0;i<arrs.length;i++){ ints[i] = Integer.parseInt(arrs[i]); } return ints; } public static void main(String[] args) throws IOException {
//按数组读取文件
ArrayList<String> array;
String line;
int length;
try {
BufferedReader br=new BufferedReader(new FileReader("1.txt"));
array=new ArrayList<String>();
line="";
//按行读取文本中数据
while((line=br.readLine())!=null){
array.add(line);
}
br.close(); length=array.size();
String[] a1 = (String[])array.toArray(new String[length]);
int[] a=StringToInt(a1); // for(int i=0;i<a.length;i++) {
// System.out.println(a[i]);
// }
// int a[]=new int[length];
//
// //遍历输出数组内容
// for(int i=0;i<length;i++) {
// String s=array.get(i);
// a[i]=Integer.parseInt(s);
// System.out.println(a[i]);
// } //进行最大值计算 int sum=0;
int curr=0; //有负有正
for(int i=0;i<length;i++) {
curr=curr+a[i];
if(curr<0) {
curr=0;
}else {
if(sum<curr) {
sum=curr;
}else {
sum=sum;
}
}
} //若全是是负数
if(sum==0) {
int sum1=a[0];
for(int i=0;i<length-1;i++) {
if(sum1>a[i+1]) {
sum1=sum1;
}
else {
sum1=a[i+1];
}
}
sum=sum1;
} System.out.println("连续子数组的最大值为:"+sum); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

运行结果

可以生成2000万的数。

找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)的更多相关文章

  1. 找一个数组的最大和的连续子数组(时间复杂度 O(n))

    设计思想 一开始的思想是求出全部的情况,再分别比较大小,这种方法适用于有限个数组,不适用于输入数组长度和内容的情况. 但也试着做了 int a[]= {-1,2,6,-10}; int size=4; ...

  2. 剑指offer面试题31连续子数组的最大和

    一.题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果 ...

  3. 《剑指Offer》- 连续子数组的最大和或最小和

    前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...

  4. 个人实战演练全过程——No.1 最大连续子数组求和

    之前的一次个人总结和一次单元测试入门学习是开启软件工程课程的前奏曲,也是热身,现在大家对于这门课程也有了初步的了解和认识,这次要开始真正的演奏了,要从头到尾完全靠自己的能力来解决一个问题,进行实战演练 ...

  5. Task 4 求数组的连续子数组的最大和(团队合作)

    小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变 ...

  6. lintcode循环数组之连续子数组求和

    v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. ...

  7. python实现连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  8. 剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)

    剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)2013-11-23 16:25 题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后, ...

  9. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

随机推荐

  1. 2018-2019-20175315 实验一 《Java开发环境的熟悉》实验报告

    2018-2019-20175315实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 实验1 1.用mkdir建立“20175303exp1”的目录 2.在“20175303 ...

  2. Houdini Distributed Simulations and Render

    1.HQueue是我最早搭建到本地农场.经过测试,效率极其低下.基本上是个玩具,离真正的管理软件差的十万八千里. 不是说Hqueue不行,因为发现了用 农场管理软件API调用Houdini Rende ...

  3. Non-decreasing Array

    Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...

  4. Timeline扩展功能实践指南

    转载于http://forum.china.unity3d.com/forum.php?mod=viewthread&tid=32842,介绍了timeline的轨道扩展 Timeline功能 ...

  5. web开发-前后端分离原理

    前言 前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务 ...

  6. C# 定时任务

    工作中需要做个每天定时发邮件的功能,了解之后知道java里有做定时任务比较容易的方法,就是Quartz,在C#里叫Quartz.Net. 在写代码之前需要引用几个dll文件,分别是C5.dll.Com ...

  7. WebStorm远程调试Node.js

    1.服务启动IP及端口,如果是云服务,IP选用服务器内网IP.同时需要防火墙需要添加端口. #添加端口 $ firewall-cmd --zone=public --add-port=9229/tcp ...

  8. PADS Layout VX.2.3 出Gerber文件时遇到一个奇怪的现象

    操作系统:Windows 10 x64 工具:PADS Layout VX.2.3 对CAM Documents的NC Drill的Units进行如下设置: 之后使用CAM Preview功能,查看N ...

  9. js object数据类型

    1.object数据类型,[可以]认为JavaScript中顶级数据类型.在JavaScript绝大多数 高级类型对象都是object类型 2.如何创建一个object类型对象 1) 通过调用Obje ...

  10. 【Vue】动态加载Html片段

    在编写Vue页面的时候,会碰到这么一个需求.由于页面组件比较多,不可能一次性将所有的页面都打包,只能按需获取相应的页面进行显示. 比如有一个App页面,需要异步获取html片段通过v-html指令加载 ...