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

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

    Pipe Utilization管道利用率 概述 CUDA设备的每个流式多处理器(SM)都具有许多专门用于执行特定任务的硬件单元.在芯片级,这些单元提供执行管道,翘曲调度程序将指令发送到这些管道.例如 ...

  2. 『言善信』Fiddler工具 — 6、Fiddler界面布局详解【命令行和状态栏】

    目录 1.命令行 2.状态栏 1.命令行 命令行在Fiddler的左下方的黑色窗口,也叫QuickExec,可以调用 Fiddler的内置命令. 这一系列内置的函数用于筛选和操作会话列表中的sessi ...

  3. eclipse左边的工程列表窗口不见了解决方案

    解决eclipse左边的工程列表窗口看不到工程目录的方法: Window->Show View->Project Explorer(如果没有Project Explorer选项,则Wind ...

  4. ES5中的类

    之前小编对于类和类的基本特征(所谓的封装.继承.多态)理解一直不是很到位,同时在实际项目应用中也用的比较少,今天小编就结合ES5中的基本用法和大家聊聊,希望小伙伴会在这篇文章有属于自己的收获,并能够在 ...

  5. javascript中的设计模式

    什么是设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. ...

  6. 网页站点下载器teleport ultra

    软件名称:teleport ultra 介绍:teleport ultra是一款专门的网页站点下载器,使用这款工具可以方便地下载网页数据,包括网站的文字.图片.flash动画等,可以轻松下载所有的网站 ...

  7. .NET 6 亮点之工作负载,它是统一 .NET 的基础

    随着.NET 6 Preview 5的发布,大家认真的看相关文章或者是动手做一个MAUI示例的时候就会碰到一个新概念工作负载(workload),相关规范参见 https://github.com/d ...

  8. 配置IPv6公网地址DDNS并开放外网访问端口

    目前使用三大运营商宽带服务都会下发公网IPv6地址,这样我们想要在外网访问家里的路由.NAS等设备就可以直接通过IPv6地址来访问了.但是每次重新拨号后IPv6地址都会改变,而且IPv6的地址很长,这 ...

  9. 「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇

    A. 神炎皇 很好的一道题,可能第一次在考场上遇到欧拉函数 题意:对于一个整数对 $(a,b)$,若满足 $a\times b\leq n$且$a+b$是$a\times b$的因子, 则称为神奇的数 ...

  10. JAVA并行程序基础二

    JAVA并行程序基础二 线程组 当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里. activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估 ...