• 返回一个整型数组中最大子数组的和(2)


    1.题目1:返回一个整数数组中最大子数组的和。

    要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)。

    新情况:

    要求数组从文件读取。

    如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。

    另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

    程序源代码:

     1 import java.io.BufferedReader;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.FileReader;
     5 import java.io.IOException;
     6 import java.util.ArrayList;
     7 import java.util.HashMap;
     8 import java.util.List;
     9 import java.util.Map;
    10 public class file {
    11   public static void main(String[] args) throws IOException {
    12       int num=0;
    13       int p[]=new int[1000000];
    14       BufferedReader reader = new BufferedReader(new FileReader(
    15               "c:\新建文件夹\\2020.2.25.txt"));
    16       StringBuffer buffer = new StringBuffer();
    17       String line = null;
    18       while ((line = reader.readLine()) != null) {
    19           buffer.append(line);
    20       }
    21     reader.close();
    22       String str = buffer.toString();
    23       str = str.replace(',', ' ');//将逗号用空格替换
    24       str = str.replace('.', ' ');//将句号用空格替换
    25 //      如果有其他参数,替换就好
    26 
    27       String[] strings = str.split("\s+");   // “\s+”代表一个或多个空格,是正则表达式
    28       int array[]=new int[strings.length];
    29       for(int i=0;i<strings.length;i++) {
    30        array[i]=Integer.parseInt(strings[i]);
    31       }
    32     int max=0;
    33 //  m数组是存放每一轮子数组最大值
    34   int m[]=new int[strings.length];
    35   for(int j=0;j<strings.length;j++)
    36   {
    37       max=array[j];
    38       int sum=0;
    39       for(int t=j;t<strings.length;t++)
    40       {
    41           if(sum>Integer.MAX_VALUE-array[t]||sum<Integer.MIN_VALUE+array[t])//防止数据溢出
    42           {System.out.println("溢出");break;
    43           }else {
    44           sum=sum+array[t];
    45           }
    46           if(sum>max)
    47           {
    48               max=sum;
    49           }
    50       }
    51       m[j]=max;
    52   }
    53   for(int i=0;i<strings.length;i++)
    54   {
    55       System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");
    56       System.out.println(m[i]);
    57   }
    58   for(int i=1;i<strings.length;i++)
    59   {
    60       max=m[0];
    61       if(m[i]>max)
    62       {
    63           max=m[i];
    64       }
    65   }
    66   System.out.print("子数组和的最大值为:"+max);
    67   }
    68 }

    运行结果截图:

     

  • 相关阅读:
    数据库 concat 与 ||
    mysql时间戳详解及运用
    mysql数据库事务的操作与理解
    数据分析实战——03丨Python基础语法:开始你的Python之旅
    数据分析实战——02丨学习数据挖掘的最佳路径是什么?
    数据分析实战——01丨数据分析全景图及修炼指南
    数据分析实战——开篇词 | 你为什么需要数据分析能力?
    从0开始学大数据学习笔记——37.如何对数据进行分类和预测?
    坚毅(GRIT)阅读笔记
    Make over monday – 每周动手实践的Tableau社区网站
  • 原文地址:https://www.cnblogs.com/a155-/p/12364195.html
Copyright © 2020-2023  润新知