最大子数组是连续的一个或者多个数组,要求的复杂度是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;
}
}