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

想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存到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. bind,call,apply的区别

    function cat(){}cat.prototype={ food:"fish", say: function(){ alert("I love "+th ...

  2. Mobileye高级驾驶辅助系统(ADAS)

    Mobileye高级驾驶辅助系统(ADAS) Mobileye is the global leader in the development of vision technology for Adv ...

  3. Tensor Core技术解析(下)

    Tensor Core技术解析(下) 让FP16适用于深度学习 Volta的深度学习能力是建立在利用半精度浮点(IEEE-754 FP16)而非单精度浮点(FP32)进行深度学习训练的基础之上. 该能 ...

  4. ITS智能交通监控系统技术解析

    ITS智能交通监控系统技术解析 红灯,逆行,变 车辆抓拍和车速检测 非法停车和交通流量检测 交叉路口违法检测 发生碰撞的交叉口是智能交通管理. 机动执法 当你需要一个可以移动的系统时,会跟着你移动.移 ...

  5. Android系统编程入门系列之应用环境及开发环境介绍

        作为移动端操作系统,目前最新的Android 11.0已经发展的比较完善了,现在也到了系统的整理一番的时间,接下来的系列文章将以Android开发者为中心,争取用归纳总结的态度对初级入门者所应 ...

  6. 三、使用sudo分配管理权限

    使用sudo分配管理权限 su命令 su -  [账户名称]     :切换到用户,不加用户名默认切换到root su -  [账户名称]  -c  '命令'   :以xx用户身份执行命令,注意命令需 ...

  7. 基于Typescript的Vue项目配置国际化

    基于Typescript的Vue项目配置国际化 简介 使用vue-i18n插件对基于Typescript的vue项目配置国际化,切换多种语言, 配合element-ui或者其他UI库 本文以配置中英文 ...

  8. Java 到底是值传递还是引用传递?

    关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的.还有的人可能知道Java中的参数传递是值传递,但是说不出来为什么. 在开始深入讲解之前,有必要 ...

  9. 27、异常处理(except)

    27.1.什么是异常: 1.异常介绍: 异常就是程序运行时发生错误的信号,在程序出错的时候,则会产生一个异常,若程序没有处理它,则会抛出该异常, 程序的运行也会随之终止,在python中,错误触发的异 ...

  10. C#使用FtpWebRequest 基础连接已经关闭:连接被意外关闭(The underlying connection was closed:The connection was closed unexpectedly)

    公司内部开发的winform程序使用了FtpWebRequest下载FTP服务器的文件到本地. 大多数人运行良好,由于我们是试运行逐步有人加入到平台的使用,前两天突然有个别机器无法连接FTP服务器报出 ...