整数子数组求最大和添加验证

实验要求:

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

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

设计思路:

首先进行数组的溢出处理,从小向大开始验证,直到程序处理时间较长。

然后进行程序所支持的最大整数测试,因为结果或过程中所出现的最大数是无法预测的,所以只需确定最大的随机数范围。

测试结果:

100个数据:

200个数据:

500个数据:

1000个数据:

99999999—999999999

999999999—9999999999

package 子数组更改;

import java.util.Scanner;

public class zsz {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner A=new Scanner(System.in);

System.out.println("请输入数组长度:");

int n=A.nextInt();

System.out.println("请输入数组数值范围:");

int N=A.nextInt();

int M=A.nextInt();

int a[]=new int[n];

int b[][]=new int[n][n];

int i;

System.out.println("数组为:");

for(i=0;i<n;i++)

{

a[i]=N+(int)(Math.random()*(M-N));

System.out.print(a[i]+"\t");

}

System.out.println();

int j,k=n,t;

for(i=0;i<n;i++)

{

for(j=0;j<k;j++)

{

for(t=j;t<j+i+1;t++)

{

b[i][j]+=a[t];

}

}

k--;

}

System.out.println("各子数组大小:");

for(i=0;i<n;i++){

for(j=0;j<n;j++){

System.out.print(b[i][j]+"\t");

}

System.out.println();

}

int p=b[0][0];

int q=0,r=0;

for(i=0;i<n;i++)

{

for(j=0;j<n-i;j++)

{

if(p<b[i][j])

{

p=b[i][j];

q=i;

r=j;

}

}

}

System.out.println("\n本数组中子数组和最大的为:"+p);

System.out.println("这个子数组是:");

for(i=0;i<q+1;i++)

{

System.out.print(a[r+i]+"\t");

}

}

}

结果分析:

处理最大数据问题:因为时间复杂度较高,所以在处理到500个数组长度的时候时间就超过10秒,1000个数据同样能处理,但因为数据太多,所以只能显示结果部分,前些部分不能在控制台显示出来。

能处理得最大数:最大到99999999—999999999还可以处理,如果数组范围在999999999—9999999999便出现错误信息,

Exception in thread "main" java.util.InputMismatchException: For input string: "9999999999"

at java.util.Scanner.nextInt(Unknown Source)

at java.util.Scanner.nextInt(Unknown Source)

at 子数组更改.zsz.main(zsz.java:19)

结组实现:

代码部分:刘洪阳;测试部分:刘双渤。

时间: 2024-11-05 21:49:23

整数子数组求最大和添加验证的相关文章

关于求已知整数数组的连续子数组的最大和的方法

日期:2019.3.9 博客期:039 星期六 这次的标题就是题目——关于求已知整数数组的连续子数组的最大和的方法,打个比方:给予数组 { 1 , -2 , 3 , -1 , 0 , 2 } ,它的连续子数组的最大和就是取得 { 3 , -1 , 0 , 2 } 时的和 4 !就是说我们需要找到元素值和最大的子数组.我们大可以考虑几种方法: (1)先求出所有的子数组,再找出每一组的和,求出和的最大值 >>>>>>>(优化)>>>>>&

【编程题目】求子数组的最大和 ☆

3.求子数组的最大和(数组)题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为 O(n).例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18. 算法里学过,动态规划.具体思路想不起来了,看了看书.要动态算1-i个元素中必须包括第i个元素的最大子段和C[i],A是原始序列 C[i + 1] = A[

微软算法100题03 求子数组的最大和

3.求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18 思路:使用辅助变量max 记录子数组的最大和,从数组头开始遍历,如果数组元素与之前的总和的sum是负数,则重置sum结果为零,否则将得到的sum值与max比较 如果小于ma

[华为机试练习题]56.求子数组的最大和

题目 描述: 输入一个整形数组.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 接口 Int GetSubArraySum(Int* pIntArray,Int nCount): 规格 要求时间复杂度为O(n) 举例 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18 练习阶段: 初级 代码 /*-------------------------------

求子数组的最大和要求O(n)

//求子数组的最大和 //输入一个整形数组.有整数也有负数,数组中连续一个或多个子数组,每一个子数组都有一个和,求全部子数组的和的最大值,要求时间复杂度O(n) #include<iostream> int GetMax( int * arr) { int max = arr[0]; for (int i = 1; i < 10; i++) { if (max < arr[i]) { max = arr[i]; } } return max; } int getMaxSum(int

Java实现:求子数组的最大和(数组)

求子数组的最大和(数组) 题目: 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为 O(n). 例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18. 解题思路: 我觉得用户关心的的数据有两个,一个是子数组的和,还有一个是子数组具体有哪些元素,所以我们可以封装一个子数组类SubArray,成员有子数据开

C语言强化(三)发现潜在规律——求子数组的最大和

上一篇解答了在栈里面求最小值元素的问题,这一篇,来聊聊怎么找到数组中子数组的最大和. 通过这道题,你可以掌握 如何根据用户输入创建数组 如何在一连串数字中找到和最大的某一段连续数字子串 如何发现问题的潜在规律并利用这个规律设计算法,解决问题 思路 连续数相加要最大,说明左右两边的数肯定不是负数,否则不可能最大 连续数序列中允许存在负数,前提是负数前面的一段正数相加要大于这个负数,否则两者抵消后,和会变小 算法 遍历数组 遇到正数,不断累加,遇到的第一个正数要记录下标 遇到负数,记录下标,把此下标

算法 - 求子数组的最大和(C++)

//**************************************************************************************************** // // 求子数组的最大和 - C++ - by Chimomo // // 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. // 求所有子数组的和的最大值.要求时间复杂度为O(n). // 例如输入的数组为5, -22, 13

求一个数组的子数组的最大和

如题:求一个数组的子数组的最大和,要求O(n)时间复杂度. 由于有了O(n)时间复杂度的限制,所以暴力求解的O(n^2)方法肯定不行.再考虑递归求一个数组a[n]的子数组的最大和,可以分解为a[i]子数组的最大和以及a[n-i-1]之间的某种情况 a[n]的子数组最大和等于a[i]子数组的最大和: a[n]的子数组最大和等于a[n-i-1]: a[n]的子数组最大和跨a[i]和a[n-i-1]: 递归实现的时间复杂度为O(nlg(n)).最后考虑时间复杂度为O(n)的动态规划实现. /** *