求数组的子数组之和的最大值II
这次在求数组的子数组之和的最大值的条件下又增加了新的约束:
1.要求数组从文件读取。
2.如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
3.另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
设计思路:
1.首先就是对文件的读取,从文件中读取数组,将按行读取的数组进行分割,存储
2.接入求最大值函数,调用数组,调整类型,对于大数进行处理,在求数组的子数组之和的最大值处参考了O(n)的算法
3.对文件读取等进行异常处理
截图:
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
8 public class shuzu2 {
9
10 public static void readFileByLines(String fileName) {
11 File file = new File(fileName);
12 BufferedReader reader = null;
13 try {
14 reader = new BufferedReader(new FileReader(file));
15 String tempString = null;
16
17 while ((tempString = reader.readLine()) != null) {
18
19 System.out.println(tempString);
20
21 }
22 reader.close();
23 } catch (IOException e) {
24 e.printStackTrace();
25 } finally {
26 if (reader != null) {
27 try {
28 reader.close();
29 } catch (IOException e1) {
30 }
31 }
32 }
33 }
34
35 public static long[] toArrayByFileReader1(String name) {
36 // 使用ArrayList来存储每行读取到的字符串
37 ArrayList<String> arrayList = new ArrayList<>();
38 try {
39 FileReader fr = new FileReader(name);
40 BufferedReader bf = new BufferedReader(fr);
41 String str;
42 // 按行读取字符串
43 while ((str = bf.readLine()) != null) {
44 arrayList.add(str);
45 }
46 bf.close();
47 fr.close();
48 } catch (IOException e) {
49 e.printStackTrace();
50 }
51 // 对ArrayList中存储的字符串进行处理
52 int length = arrayList.size();
53 long[] array = new long[length];
54 for (int i = 0; i < length; i++) {
55 String s = arrayList.get(i);
56 array[i] = Long.parseLong(s);
57 }
58
59 long f=0;//定义整形变量f,为子数组最大值
60 long sum=0;//定义整形变量sum,为子数组求和
61 for(int i=0;i<length;i++)
62 {
63 sum = sum+array[i];
64 if(sum < 0)
65 {
66 sum=0;
67 }
68 if(sum > f)
69 {
70 f = sum;
71 }
72 }
73
74 if(sum == 0)
75 {
76 for(int i=0;i<length;i++)
77 {
78 if(i == 0)
79 {
80 f = array[i];
81 }
82 if(f < array[i])
83 {
84 f = array[i];
85 }
86 }
87 }
88
89 System.out.println("该数组的子数组之和的最大值为:"+f);
90
91
92 // 返回数组
93 return array;
94 }
95
96
97 public static void main(String[] args) throws IOException{
98
99 String name = new String("E:\\Program Files\\eclipse操作\\shuzu\\src\\test2\\input.txt");
100
101 readFileByLines(name);
102 toArrayByFileReader1(name);//文件路径
103
104 }
105 }
反思:
对于大数的处理还不是很熟悉,在课上听同学们的交流,应该采用随机生成数的方式,随机产生随机个数的数字,用来测试读取数字的最大个数,这一点没有实现,还有异常处理也没有实现,对于不合法数字、文件读取等方面的处理还不会。这次更充分的体现了分步的重要性,如果不分步的话,会感觉到十分吃力,会感觉到无从下手,这种东西还是得多练。
求数组的子数组之和的最大值II的更多相关文章
- 求数组的子数组之和的最大值III(循环数组)
新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...
- C#中求数组的子数组之和的最大值
<编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...
- 求数组的子数组之和的最大值IV
在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...
- N元数组的子数组之和的最大值
题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...
- 求二维数组联通子数组和的最大值 (联通涂色) beta!
算法十分臃肿,效率捉鸡,不知用了多少循环,还有bug...任重道远,编程之美. 思想:按行遍历,找出每行的最大子数组.若行间都联通,行最大子数组相加后,再加上独立的正数.若行间不连通,找出较大子路径, ...
- [LeetCode] Minimum Size Subarray Sum 最短子数组之和
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
- Minimum Size Subarray Sum 最短子数组之和
题意 Given an array of n positive integers and a positive integer s, find the minimal length of a suba ...
- [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 ...
- lintcode:子数组之和为0
题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...
随机推荐
- Pipe Utilization管道利用率
Pipe Utilization管道利用率 概述 CUDA设备的每个流式多处理器(SM)都具有许多专门用于执行特定任务的硬件单元.在芯片级,这些单元提供执行管道,翘曲调度程序将指令发送到这些管道.例如 ...
- JUC 并发编程--09, 阻塞队列: DelayQueue, PriorityBlockingQueue ,SynchronousQueue, 定时任务线程池: ScheduledThreadPoolExecutor
先看DelayQueue 这个是用优先级队列实现的无界限的延迟队列,直接上代码: /** * 这个是 {@link DelayQueue} 延时队列 的验证使用类 */ class MyDelayed ...
- 九、Nginx常见问题处理
优化Nginx并发量 优化软件进程数.优化软件最大并发连接数限制.优化内核连接数限制open files(临时和永久同时设置) [root@proxy ~]# ab -n 2000 -c 2000 ...
- 谷歌chrome浏览器network中Stalled分析和优化
谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...
- WPF 后台代码做 TranslateTransform 的动画
本文告诉大家,在后台代码,对 TranslateTransform 做动画的方法 今天小伙伴问我一个问题,说为什么相同的代码,如果设置到按钮上,是可以让按钮的某个属性变更,但是如果设置给 Transl ...
- npm install 动不动卡住咋办?
Hello 我是大粽子 孩子静消消,必定在作妖.我这三天静消消,也是在憋大招. 提前预告下,最近和视频号的文档正在较劲,剩下的功能大家猜猜.暂时没有留言功能,可以私信回复,猜对的下次购买时提我大名10 ...
- 循序渐进BootstrapVue,开发公司门户网站(1)---基于Bootstrap网站模板构建组件界面
在前面随笔<使用BootstrapVue相关组件,构建Vue项目界面>概括性的介绍了BootstrapVue的使用过程,其实选用这个主要就是希望能够用来构建一些公司门户网站的内容,毕竟基于 ...
- 浅谈lambda表达式<最通俗易懂的讲解
Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论.Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中.想想看,在Java8 ...
- Java中最大的数据结构:LinkedHashMap了解一下?
前言 Map 家族数量众多,其中 HashMap 和 ConcurrentHashMap 用的最多,而 LinkedHashMap 似乎则是不怎么用的,但是他却有着顺序.两种,一种是添加顺序,一种是访 ...
- etcd 添加用户,授权特定目录
适用场景 多组共用etcd集群,创建一个新用户.新目录,让这个新用户只有新目录的使用权限. 命令和顺序 创建目录,注意此处是v2 curl -u root:pwd http://host:2379/v ...