新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试

想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存到result数组中,最后比较result数组的最大值

代码如下:

  1 package test2;
2 import java.io.BufferedReader;
3 import java.io.File;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.util.ArrayList;
7 import java.util.Scanner;
8
9 public class shuzu2 {
10
11 static Scanner cin = new Scanner(System.in);
12
13 public static void readFileByLines(String fileName) {
14 File file = new File(fileName);
15 BufferedReader reader = null;
16 try {
17 reader = new BufferedReader(new FileReader(file));
18 String tempString = null;
19
20 while ((tempString = reader.readLine()) != null) {
21
22 System.out.println(tempString);
23
24 }
25 reader.close();
26 } catch (IOException e) {
27 e.printStackTrace();
28 } finally {
29 if (reader != null) {
30 try {
31 reader.close();
32 } catch (IOException e1) {
33 }
34 }
35 }
36 }
37
38 public static long[] toArrayByFileReader1(String name) {
39 // 使用ArrayList来存储每行读取到的字符串
40 ArrayList<String> arrayList = new ArrayList<>();
41 try {
42 FileReader fr = new FileReader(name);
43 BufferedReader bf = new BufferedReader(fr);
44 String str;
45 // 按行读取字符串
46 while ((str = bf.readLine()) != null) {
47 arrayList.add(str);
48 }
49 bf.close();
50 fr.close();
51 } catch (IOException e) {
52 e.printStackTrace();
53 }
54 // 对ArrayList中存储的字符串进行处理
55 int length = arrayList.size();
56 long[] array = new long[length];
57 for (int i = 0; i < length; i++) {
58 String s = arrayList.get(i);
59 array[i] = Long.parseLong(s);
60 }
61 long[] newarray = new long[5*length];//剪开带子后新数组
62 long[] result = new long[1000];//存放求和子数组
63 int rs=0;//子数组计数器
64 long f=0;//定义整形变量f,为子数组最大值
65 long sum=0;//定义整形变量sum,为子数组求和
66 System.out.println("输入遍历开始的位置:");
67 int a = cin.nextInt();
68 int sa = 0;//a用来存储剪开带子位置
69 int k = 0 ;
70 long []jieguo = new long[1000];
71 for(int j = 0;j < array.length;j++)
72 {
73 newarray[k++] = array[j];
74 newarray[j+array.length] = array[j];
75 //System.out.println("1 "+newarray[j]);
76 }
77 for(int i=0;i<2*array.length;i++)
78 System.out.println("2 "+newarray[i]);
79 int mlist,slist=0;
80 long max;
81 for(int i=0;i<length;i++) //O(n^2)求子数组之和
82 {
83 mlist = 0;
84 for(int j=i;j<length+i;j++)
85 {
86 mlist +=newarray[j];
87 result[rs++] = mlist; //将子数组之和存在数组result[]内
88 System.out.println("第"+ (slist+1) +"个子数组的和为:" + mlist);
89 slist++;
90 }
91 }
92 for(int i=0;i<rs;i++)
93 {System.out.println("reslut"+i+" "+result[i]);}
94 max = result[0]; //将子数组和数组第一个值给max,然后循环进行比较,求出最大值
95 for(int i = 0;i<slist;i++)
96 {
97 if(max < result[i])
98 max = result[i];
99 }
100 //将新数组存一下
101 System.out.println("该数组的子数组之和的最大值为:"+max);
102 // 返回数组
103 return array;
104 }
105
106
107 public static void main(String[] args) throws IOException{
108
109 String name = new String("E:\\Program Files\\eclipse操作\\shuzu\\src\\test2\\input.txt");
110
111 readFileByLines(name);
112 toArrayByFileReader1(name);//文件路径
113
114 }
115 }

运行结果:

遇到的问题:在这次处理中,数组下标越界的情况比较多,考虑情况比较少,课上想用的是数据结构中学的循环队列来解决,但是没有实现,算法还得好好复习复习。

求数组的子数组之和的最大值III(循环数组)的更多相关文章

  1. 求数组的子数组之和的最大值II

    这次在求数组的子数组之和的最大值的条件下又增加了新的约束:  1.要求数组从文件读取.      2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保 ...

  2. C#中求数组的子数组之和的最大值

    <编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...

  3. 求数组的子数组之和的最大值IV

    在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...

  4. N元数组的子数组之和的最大值

    题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...

  5. 求二维数组联通子数组和的最大值 (联通涂色) beta!

    算法十分臃肿,效率捉鸡,不知用了多少循环,还有bug...任重道远,编程之美. 思想:按行遍历,找出每行的最大子数组.若行间都联通,行最大子数组相加后,再加上独立的正数.若行间不连通,找出较大子路径, ...

  6. [LeetCode] Minimum Size Subarray Sum 最短子数组之和

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  7. Minimum Size Subarray Sum 最短子数组之和

    题意 Given an array of n positive integers and a positive integer s, find the minimal length of a suba ...

  8. [LeetCode] 209. Minimum Size Subarray Sum 最短子数组之和

    Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...

  9. lintcode:子数组之和为0

    题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...

随机推荐

  1. 快速导入GitHub上面的公钥

    有时候新装了一台linux机器, 又要找公钥导进去, 或者在自己电脑上执行ssh-copy-id, 有时候手边没有电脑就比较麻烦, 我们可以将GitHub上配置的公钥导入到机器里 首先包装GitHub ...

  2. JavaScript 中数组 sort() 方法的基本使用

    在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序. 今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇. 概念 sort ...

  3. pycham_编码格式设置,处理打印log乱码,处理读取配置文件报错

    一.打印日志乱码,处理设置如下: 二.配置文件读取方法因为gbk编码配置后需要同步修改 原报错信息:

  4. B-Tree插入和删除的Java实现

    B-Tree插入和删除的Java实现 一.一颗非空m阶B-Tree的性质 除根结点以外的每个结点的孩子引用最多存在m个,关键码最多存在m - 1个:除根结点以外的每个结点的孩子引用至少存在⌈m / 2 ...

  5. 尚硅谷Java——宋红康笔记【day6-day10】

    day6 一.数组的概述 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 2.数组相关的概念: 数组名 元素 ...

  6. Task00:绪论 - 环境搭建

    本章重点: 在电脑上安装MySQL数据库系统 安装客户端并连接到本机上的MySQL数据库 使用提供的脚本创建本教程所使用的示例数据库 1. MySQL 8.0 的安装 考虑到大家所使用的操作系统的不同 ...

  7. 【NX二次开发】Block UI 指定矢量

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  8. 【VBA】读取配置文件存入字典型变量中

    配置文件:  源码: Dim Co As Object '设为全局变量 Function 读取cfg() As Boolean Dim strcfg As String strcfg = " ...

  9. 深入理解Java中的反射机制和使用原理!详细解析invoke方法的执行和使用

    反射的概念 反射: Refelection,反射是Java的特征之一,允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性 通过反射,可以在运行时获得程序或者程序中的每一个类型的成员活 ...

  10. 详解详解Java中static关键字和final关键字的功能

    摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...