结对开发---求一数组的最大子数组的和

一、题目:

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

  要求:

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

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

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

二、设计思路

  1.先分别求书自数组元素个数为1,2....的数组中最大的一个和

  2.将求出的不同元素个数的数组的最大和组成一个新数组。

  3.求出新数组中的最大数

4.最后,分别用全正,全负,有正有负的数进行检测。

三、源代码

package com.minirisoft;

import java.util.*;

import java.util.*;

class Shuzu
{
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);

		int[] list = new int[10];//输入数组是必须先定义数组,否则出错!
		int[] arr1 = new int[9];//输入数组是必须先定义数组,否则出错!
		int[] arr2 = new int[8];//输入数组是必须先定义数组,否则出错!
		int[] arr3 = new int[7];//输入数组是必须先定义数组,否则出错!
		int[] arr4 = new int[6];//输入数组是必须先定义数组,否则出错!
		int[] arr5 = new int[5];//输入数组是必须先定义数组,否则出错!
		int[] arr6 = new int[4];//输入数组是必须先定义数组,否则出错!
		int[] arr7 = new int[3];//输入数组是必须先定义数组,否则出错!
		int[] arr8 = new int[2];//输入数组是必须先定义数组,否则出错!
		int[] ma = new int[10];//输入数组是必须先定义数组,否则出错!

		int i=0,sum = 0;
		System.out.println("请输入数组:");
		for(int k=0;k<10;k++)
		{
			list[k]=sc.nextInt();
		}
		int max=list[0];

		for(i=0;i<10;i++)
		{
			if(list[i]>max)
			{
				max=list[i];
			}

		}
		ma[0] = max;
		System.out.println("有1个元素最大子数组的和为"+ma[0]);
		for(i=0;i<9;i++)
		{
			arr1[i] = list[i]+list[i+1];
		}
		int max1=arr1[0];
		for(i=0;i<9;i++)
		{
			if(arr1[i]>max1)
			{
				max1=arr1[i];
			}

		}
		ma[1]=max1;
		System.out.println("有2个元素最大子数组的和为"+ma[1]);
		for(i=0;i<8;i++)
		{
			arr2[i] = list[i]+list[i+1]+list[i+2];
		}
		int max2=arr2[0];
		for(i=0;i<8;i++)
		{
			if(arr2[i]>max2)
			{
				max2=arr2[i];
			}

		}
		ma[2]=max2;
		System.out.println("有3个元素最大子数组的和为"+ma[2]);
		for(i=0;i<7;i++)
		{
			arr3[i] = list[i]+list[i+1]+list[i+2]+list[i+3];

		}
		int max3=arr3[0];
		for(i=0;i<7;i++)
		{
			if(arr3[i]>max3)
			{
				max3=arr3[i];
			}

		}
		ma[3] = max3;
		System.out.println("有4个元素最大子数组的和为"+ma[3]);
		for(i=0;i<6;i++)
		{
			arr4[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4];
		}
		int max4=arr4[0];
		for(i=0;i<6;i++)
		{
			if(arr4[i]>max4)
			{
				max4=arr4[i];
			}

		}
		ma[4] = max4;
		System.out.println("有5个元素最大子数组的和为"+ma[4]);
		for(i=0;i<5;i++)
		{
			arr5[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5];
		}
		int max5=arr5[0];
		for(i=0;i<5;i++)
		{
			if(arr5[i]>max5)
			{
				max5=arr5[i];
			}

		}
		ma[5] = max5;
		System.out.println("有6个元素最大子数组的和为"+ma[5]);
		for(i=0;i<4;i++)
		{
			arr6[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6];
		}
		int max6=arr6[0];
		for(i=0;i<4;i++)
		{
			if(arr6[i]>max6)
			{
				max6=arr6[i];
			}

		}
		ma[6] = max6;
		System.out.println("有7个元素最大子数组的和为"+ma[6]);
		for(i=0;i<3;i++)
		{
			arr7[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7];
		}
		int max7=arr7[0];
		for(i=0;i<3;i++)
		{
			if(arr7[i]>max7)
			{
				max7=arr7[i];
			}

		}
		ma[7] = max7;
		System.out.println("有8个元素最大子数组的和为"+ma[7]);
		for(i=0;i<2;i++)
		{
			arr8[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7]+list[i+8];
		}
		int max8=arr7[0];
		for(i=0;i<2;i++)
		{
			if(arr8[i]>max8)
			{
				max8=arr8[i];
			}

		}
		ma[8] = max8;
		System.out.println("有9个元素最大子数组的和为"+ma[8]);
		for(i=0;i<10;i++)
		{
			sum = sum+list[i];
		}
		ma[9] = sum;
		System.out.println("有10个元素最大子数组的和为"+ma[9]);

		int max9=ma[0];
		for(i=0;i<10;i++)
		{
			if(ma[i]>max9)
			{
				max9=ma[i];
			}

		}
		System.out.println("最大子数组的和为"+max9);
	}

}

四、实验结果

五、心得体会

做了这么多实验,第一次尝试组队做实验,感觉组队有好有坏吧。好处是能从组员那得到更多的思路,不好的是每个人都有自己的思路,

当思路不同时还得花时间去相互沟通,没自己做省事。但我感觉应该多练习组队做,毕竟以后工作是团队工作,学会如何更好的和小组沟通合作

会为自己将来工作打下更好的基础。

六、小组成员:杨广鑫、郭健豪

时间: 2024-08-25 07:54:27

结对开发---求一数组的最大子数组的和的相关文章

求一维数组的最大子数组1(结对开发)

题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n) 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选).源代码.结果截图.总结. 结对开发的伙伴: 博客名:Mr.缪 姓名:缪金敏 链接:http://www.cnblogs.com/miaojinmin799/ 分析: 如果按照最笨的方法就是一个一个的比较先比较一个数的然后二个

结对开发(求二维首尾相接数组的最大子数组和)

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 一.设计思想 求环形二维数组最大子数组的和,可以转化为求一维数组最大子数组的和 我们有一个最初的二维数组a[n][n]找它的 最大子数组之和 1.我们先建立一个新的二维数组b[n][2*n-1], 2,这个新的二维数组就是将初始的二

结对开发之求任意一个数组的最大子数组

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想. 将接收的数组放到a[i],将接收的数组中的所有子数组的和放到b[i]中,然后找出最大值max,即为该数组的最大子数组和. 将最大值的脚标放到s[i]中,求出 最大子数组的首个数字的脚标s[i],与连续相加数字的个数t[i]. 三.代码. #include

结对开发-求环状二维数组最大子数组

结对成员:信1201-1班    黄亚萍 信1201-1班    袁亚姣 一.题目要求 要求:            输入一个二维整形数组,数组里有正数也有负数.            二维数组首尾相接,象个一条首尾相接带子一样.            数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.            求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和. 二.设计思路 类似于3,将二维数组转化为一维数组来求最大子数组

结对开发——求环形一维数组最大子数组的和

题目:返回一个整数数组中最大子数组的和.要求:(1)输入一个整形数组,数组里有正数也有负数.(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大.(4)同时返回最大子数组的位置.(5)求所有子数组的和的最大值.要求时间复杂度为O(n).一.设计思想 这个问题的最优解一定是以下两种可能.可能一:最优解没有跨过array[n-1]到array[0],即和非环形数

结对开发——求环形二维数组最大子矩阵和的问题

一.题目要求 输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.解题思路 这次就在以前的基础上进行修改,先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果. 三.程序代码 1 #include "stdafx.h" 2 #include<i

结对开发之《返回一个二维整数数组中最大子数组的和》

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划.发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月9日24:00) 二.编程思路 我们的思路比较简单,采用的是将

结对开发之返回一个整数数组中最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 二.要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.分工 我选择了领航员的角色,伙伴则是驾驶员职责: 一下是我们的工作照: 四.感想

结对开发--求环数组的最大字数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如 果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 这次的主要问题在于这次的一位数组要首尾相连,允许A[i-1], …… A[n-1], A[0]……A[j-1]