求数组的子数组的最大值(文件存储)

  这周我们老师布置了在上一周的基础上实现文件的存储以及读取,刚开始我先将文件存储以及相关的程序写出来,通过询问老师发现对于数组空间的定义可以使用变量形式,经过这个方法我完成了对任意大小的数据可以进行储存以及读取,之后有听取其他同学的惊讶能使用biginteger类来实现大数据的存储。

源代码:

package lianxi;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Scanner;

public class App7 {
    public static void main(String[] args) throws IOException
    {
        Scanner in= new Scanner(System.in);
        //writeFile();
        int hang=gethang();
        String[] num=getnum(hang);
        String[] num2=new String [hang];
        String max="0";
        BigInteger bi,bi2;
        int s;
        boolean f=false;
        for(s=0;s<num.length;s++) {
            if(num[s]==null)break;
            bi=new BigInteger (num[s]);
            if(bi.max(BigInteger.valueOf(0))!=BigInteger.valueOf(0))f=true;
        }
        if(f==true) {
        max=num[0];
        num2[0]=num[0];
        for(int i=1;i<s;i++) {
            //num2[i]=num2[i-1]+num[i];
            bi=new BigInteger (num[i]);
            bi2=new BigInteger (num2[i-1]);
            num2[i]=""+bi2.add(bi);
            if(bi.max(bi2)==bi)max=num2[i];
        }
        for(int i=0,j=0;j<s;) {            //循环减去第一个
            bi=new BigInteger (num2[i]);
            bi2=new BigInteger (num[j]);
            bi=bi.subtract(bi2);
            if(bi.max(bi2)==bi)max=num2[i];
            if(i==s-1) {j++;i=j;}
            else i++;
        }
        }
        else {
            max=num[0];
            num2[0]=num[0];
            for(int i=1;i<s;i++) {
                num2[i]=num2[i-1]+num[i];
                bi=new BigInteger (num[i]);
                bi2=new BigInteger (num[i-1]);
                if(bi.max(bi2)==bi)max=num2[i];
            }
        }
        System.out.println(max);
        //add();
        in.close();
    }
    public static int gethang() {
        int i=0;
        try (FileReader reader = new FileReader("text.txt");
                BufferedReader br = new BufferedReader(reader))
            {
            String line;
            while ((line = br.readLine()) != null) {
                i++;
             }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return i;
    }
    public static String[] getnum(int lang) throws IOException {
        String [] in=new String[lang];
        int i=0;
        try (FileReader reader = new FileReader("text.txt");
                BufferedReader br = new BufferedReader(reader))
            {
            String line;
            while ((line = br.readLine()) != null) {
                 in[i]= line;
                i++;
             }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return in;
    }

        public   void writeFile() {
            int i=0;
            int fu=0;
            try {
                File writeName = new File("text.txt");
                writeName.createNewFile();
                try (FileWriter writer = new FileWriter(writeName);
                     BufferedWriter out = new BufferedWriter(writer)
                ) {
                    for(int j=0;j<150;j++) {
                        i=1+(int)(Math.random()*9);
                        //fu=1+(int)(Math.random()*2);
                        //if(fu==1)i=0-i;
                    out.write(i+"\r\n"); // \r\n换行
                    out.flush();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static void add()  throws IOException {

            int i=0;
            try (FileReader reader = new FileReader("text.txt");
                    BufferedReader br = new BufferedReader(reader))
                {
                String line;
                while ((line = br.readLine()) != null) {

                    i+=Integer.parseInt(line);
                 }
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            System.out.println("sum="+i);
        }

}

原文地址:https://www.cnblogs.com/huan-ch/p/10546592.html

时间: 2024-11-10 16:44:24

求数组的子数组的最大值(文件存储)的相关文章

编程之美之2.14 求数组的子数组之和的最大值

[题目] 一个有N个整数元素的一维数组(A[0],A[1],A[2],...A[n-1]),这个数组中当然有很多子数组,那么子数组之和的最大值是多少? 该子数组是连续的. 我们先来明确一下题意: (1)子数组意味着是连续的. (2)题目只需要求和,并不需要返回子数组的具体位置. (3)数组的元素是整数,所以数组可能包含正整数,负整数或者零. 举几个例子: 数组:[1,-2,3,5,-3,2]返回8 数组:[0,-2,3,5,-1,2]返回9 数组:[-9,-2,-3,-5,-3]返回8 [解法一

编程之美2.14 求数组的子数组之和的最大值

问题描述: 一个有N个整数元素的一维数组(A[0], A[1], A[2],...,A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是什么呢? 解法: 1. 暴力解法-------O(N^3) 2. 改进版暴力解法-------O(N^2) *3. 分治算法-------O(NlogN)(暂时未去实现) 4. 数组间关系法-------O(N) 具体思路和代码: 1.暴力解法 思路:Sum[i,...,j]为数组第i个元素到第j个元素的和,遍历所有可能的Sum[i,...,j].

求数组的子数组之和的最大值?

自己写的代码考虑未周全,引入了额外的空间复杂度: //求数组的子数组之和的最大值 #include <iostream> #define N 12 using namespace std; int main() { //int a[]={-5,2,3,-3,-2,3,1,-5}; //int a[]={-5,2,0,3,-2,3,4,5}; int a[]={1,-2,3,10,-4,7,2,-5}; int flag,max,i,j=0; int sum[N]={0}; //(1)记录子数组

第2章 数字之魅——求数组的子数组之和的最大值

求数组的子数组之和的最大值 问题描述 分析与解法 [解法一] 具体代码如下: 1 package chapter2shuzizhimei.maxsumsubarray; 2 /** 3 * 求数组的子数组之和的最大值 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class MaxSumSubArray1 { 9 //求数组的子数组之和的最大值 10 public static double maxSum(double a[]){ 11 double

[编程之美] 2.14 求数组的子数组之和的最大值

问题描述:给定一个包含N个整数的数组,求数组的子数组之和的最大值. 这是递归和贪心策略的一个经典问题.现在,对这个问题进行一下总结. 1 明确题意 题目中的子数组要求是连续的,也就是数组中的某个连续部分. 如果数组中都是正整数,直接相加就行.因此,主要是要考虑负数的情况. 2 直接求所有的子数组和 最简单且容易理解的解法是求出所有的子数组和,然后保存最大的和. int MaxSum(int *A, int n) { int maximum = -INF; int sum = 0; int i =

【编程之美】求数组的子数组之和的最大值

一个有N个整数元素的一维数组A[0],A[1],......,A[n-1],这个数组当然有很多子数组,那么子数组的最大值是什么呢? 分析与解法 我们先明确题意: 1. 题目说的子数组,是连续的: 2. 题目只需要求和,并不需要返回子数组的具体位置: 3. 数组中的元素是整数,所以数组可能包含有正整数.零.负整数: 4. 子数组不为空. 解法一:枚举 最简单的办法就是枚举所有的i和j,计算sum[i..j] = A[i]+A[i+1]+...+A[j],遍历所有可能的sum[i..j],找到最大值

2.14 求数组的子数组之和的最大值

题目:给定一个一维数组,求这个数组的子数组之和的最大值. 最佳方法:动态规划! 一. 可以将一个大问题(N个元素数组)转化为一个较小的问题(N-1个元素数组).. 假设已经知道(A[1],...A[n-1])中最大的子数组的和为:All[1] 并且已经知道(A[1],...A[n-1])中包括A[1]的子数组的最大和为start[1] 所以最终的解All[0] = max(A[0], A[0]+start[1], All[1]) 所以通过DP来求解! 代码如下: #include <iostre

首尾相接的数组的子数组的最大值

设计思想:输入一定长度的数组,分别以每个数为数组的开头,进行一维非环的数组求最大值,得出最大值,为首尾相接的数组的最大值, 程序源代码: package sumarray; import java.util.InputMismatchException; import java.util.Scanner; public class MaxSum { public static void main(String args[]) { int maxsum=0,sum=0;//maxsum为sum中的

Algorithm One Day One--求输入的数组其子数组的最大值

算法是编程的灵魂,是编程思想的精髓----Algorithm One Day One /******************************************************************** created:2015年1月19日 00:20:59 author: Jackery T(n)=Ο(n) purpose: 本程序是求输入的一个数组,求其子数组的最大值: **************************************************