zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和

    题目:

    返回一个整数数组中最大子数组的和。

    要求:

    ·要求程序必须能处理1000 个元素;

    ·每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;

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

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

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

    结对编程要求:

    ·两人结对完成编程任务。

    ·一人主要负责程序分析,代码编程。

    ·一人负责代码复审和代码测试计划。

    ·发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。(截止时间329日晚18:00之前)

    拓展:

    C#int16int32int64的区别

    (注:java中没有这些数据类型的这种叫法,这是C#中的叫法,其与java中的shortintlong类型一一对应

    Int16值类型表示值介于-32768+32768之间的有符号整数。

    Int32值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。

    Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。

    short 关键字表示一种整数数据类型,该类型根据下表显示的大小和范围存储值。

    类型

    范围

    大小

    .NET Framework 类型

    short

    -32,768 到 32,767

    有符号 16 位整数

    System.Int16

    ----------------------------------------------------------------------------------------------------------------------------------------

    int 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。

    类型

    范围

    大小

    .NET Framework 类型

    int

    -2,147,483,648 到 2,147,483,647

    有符号 32 位整数

    System.Int32

    ----------------------------------------------------------------------------------------------------------------------------------------

    long 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。

    类型

    范围

    大小

    .NET Framework 类型

    long

    -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

    有符号 64 位整数

    System.Int64

    设计思想

    在上一道练习的基础上,修改整型数组的长度使其长度为100000,然后用户在输入产生随机数的个数时,输入1000,即可满足本体要求必须能处理1000个元素。

    程序源代码

    import java.util.Random;

    import java.util.Scanner;

    public class zuidazishuzu2 {

    /**

     * @param args

     */

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    int array[]=new int[100000];

    int flag1=0;

    int flag2=0;

    int flagTemp1=0;

    int flagTemp2=0;//分别记录子数列的起始和结束位置

    int sum,sumTemp;//表示子数列的和

    Random r=new Random();

    System.out.print("请输入数组元素的个数: ");

    Scanner sc=new Scanner(System.in);

    int number=sc.nextInt();

    System.out.println("--------------------------------" +

    "------------------------------------------");

    System.out.print("产生的随机数序列为:     ");

    for(int i=0;i<number;i++){

    array[i]=r.nextInt()%10;

    System.out.print(array[i]+"   ");

    }

    System.out.println("");

    sum=array[0];

    sumTemp=sum;

    for(int i=0;i<number;i++){

    if(sumTemp<=0){

    sumTemp=0;

    flagTemp1=i+1;

    flagTemp2=i;

    }

    sumTemp+=array[i+1];

    flagTemp2++;

    if(sumTemp>sum){

    sum=sumTemp;

    flag1=flagTemp1;

    flag2=flagTemp2;

    }

    }

    System.out.print("子数组的组成元素为:    ");

    for(int i=flag1;i<=flag2;i++)

    System.out.print(array[i]+"    ");

    System.out.println(' '+"子数组和的最大值为:    "+sum);

    }

    }

    当输入数组元素个数为1000时的显示结果

     

    当输入数组元素个数为10000时的显示结果

     

    当输入数组元素个数为15000时的显示结果

     

    当输入数组元素个数为99999时的显示结果

     

    总结:

    由截图可以看出虽然子数列和的最大值没有超出int表示的范围,但是结果显示的格式发生了变化:子数组组成元素显示了两次,产生的随机数序列显示的位置发生了变化。可见当数据的数量达到一定程度时,程序不会报错但会发生各种不同的错误输出,因此在以后的编程过程中要,当数据较大时,要有注意数据类型的选取的意识!

    可能的解决方案

    1.若知道数据的范围,可以选择适当的数值类型。

    2.若是大数据,超出数值类型的表示范围,则将整型数据转化为字符串类型进行运算。

     

    张欢龙主要负责程序分析,代码编程。

    李响负责代码复审和代码测试计划。

  • 相关阅读:
    ◆ C++中通过溢出覆盖虚函数指针列表执行代码
    关于在OnTimer中连续弹出对话框的讨论
    SetTimer
    Windows内核对象
    日志收缩
    暴力求值
    低级问题
    函数限制
    字符串找字段和表
    android错误提示说明汇总
  • 原文地址:https://www.cnblogs.com/bdqczhl/p/4376130.html
Copyright © 2011-2022 走看看