求数组的子数组之和的最大值III(循环数组)
新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试
想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存到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 }
运行结果:
遇到的问题:在这次处理中,数组下标越界的情况比较多,考虑情况比较少,课上想用的是数据结构中学的循环队列来解决,但是没有实现,算法还得好好复习复习。
转载于:https://www.cnblogs.com/flw0322/p/10609966.html
求数组的子数组之和的最大值III(循环数组)相关推荐
- 【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
测试题目 求整数数组的子数组之和的最大值. 题目分析 首先是明确题目的目的:求最大值:其次是考虑子数组求和.这里将求最大值写成一个单独的函数.主函数未测试函数.这里用到了二重循环,时间复杂度为N^2. ...
- 编程之美-2.14-求数组的子数组之和的最大值
这个以前写过,见求数组的最长子数组之和的最大值 这里说一下后面扩展题目. 1. 简述 1) 如果数组首尾相连,即允许找到一组数字(A[i],···,A[n-1], A[0],···, A[j]),请使 ...
- 求数组的子数组之和的最大值
一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, ...
- 编程之美 2.14求数组的子数组之和的最大值
对于一个有N个元素的数组,a[0]~a[n-1],求子数组最大值. 如:数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. ...
- 算法-求数组的子数组之和的最大值
一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢? 思考 1.题目说的子数组是连续的: 2.题目只需要求和,并不需要返回子数组的具体位置: 3.数组的元素是整数,所以数组可能包 ...
- Programe_Of_Beauty:2.14 求数组的子数组之和的最大值
问题:一个有N个整数元素的一维数组,那么求子数组和的最大值. 分析:首先我们明确问题,子数组是联系的,不用返回元素的位置,元素是整数,可能为正,负或0.我们来看看最经典的解法:a[0],a[1]-a[ ...
- 编程之美2.14 求数组的子数组之和的最大值
这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的. 解题思想也不是很难,我熟悉的有:两种解题办法: ...
- 求数组的子数组之和的最大值IV
在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...
- 编程之美-求数组的子数组之和的最大值方法整理
[试题描述] 方法一: 上面这个算法的时间复杂度为O(n^3),改进后如下: 此时算法的时间复杂度为O(n^2) 方法二:时间复杂度O(nlogn) 方法三:时间复杂度O(n) 改进一下,可以得到空间 ...
- 《团队开发一(求一个数组的连续的子数组之和的最大值)》
<团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...
最新文章
- 两个大炸弹:清华大学医学院院长董晨院士回应“24篇论文质疑”;南开校长,曹雪涛团队12篇论文被正式调查“可信性”...
- LightOJ 1095 Arrange the Numbers(容斥原理)
- JDeodorant 的使用
- java改写weka中的算法_用Eclipse在Weka中嵌入新算法
- eclipse主题下载网站
- linux ls in*,35 ls Command Examples in Linux (The Complete Guide)
- APP技巧:盘点微信去年更新的9个更新功能,你都知道吗?
- 在Controller中使用AOP
- 如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...
- [Quatsch]Quantum Or Optics
- 使用设备mac好还是随机mac好_省4000我给MBP16搭配了一块2T SSD:希捷 酷鱼飞翼 Fast SSD使用测评...
- python童年_300行Python代码实现俄罗斯方块,致敬逝去的童年
- selenium-webdriver——如何在启动firefox时加载扩展
- Android 安全架构及权限控制机制剖析
- OpenGL——颜色混合 glBlendFunc函数
- AE插件 点线面三维粒子插件 Plexus Mac v3.1.8破解版
- Robocode:下载安装及迁移至IntelliJ
- 网络编程I/O模型分析
- 煤炭传送带状态检测系统-python
- 哪些蓝牙耳机适合打游戏?适合打游戏的低延迟蓝牙耳机排行