软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

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

要求: 输入一个整型数组,数组里有正数也有负数;

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

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

一、设计思想

1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数。

2.从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。

3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。

4.依次循环,循环num次,直到数组最后一个元素,将每次求得的最大值存到一个数组list[]中。

5.比较每次得出的子数组的和的最大值,再得出最大值。

二、源程序

 1 //作者:王雪青   陆宇
 2 //日期:2015年3月18日
 3 package com.java.lianxi;
 4
 5 import java.util.*;
 6 public class lianxi2
 7 {
 8     public static void main(String[] args)
 9     {
10         Scanner input=new Scanner(System.in);
11         System.out.print("请输入数组中数的个数:");
12         int num=input.nextInt();
13         int array[]=new int[num];
14         for(int i=0;i<num;i++)
15         {
16             if((int)(Math.random()*2)==0)
17             {
18                 array[i]=(int)(Math.random()*10);
19             }
20             else
21             {
22                 array[i]=-(int)(Math.random()*10);
23             }
24         }
25         for(int i=0;i<num;i++)
26         {
27             System.out.println(array[i]);
28         }
29         int max=0;
30         int list[]=new int[num];
31         for(int j=0;j<num;j++)
32         {
33             max=array[j];
34             int sum=0;
35             for(int t=j;t<num;t++)
36             {
37                 sum=sum+array[t];
38                 if(sum>max)
39                 {
40                     max=sum;
41                 }
42             }
43             list[j]=max;
44         }
45         for(int i=0;i<num;i++)
46         {
47             System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");
48             System.out.println(list[i]);
49         }
50         for(int i=1;i<num;i++)
51         {
52             max=list[0];
53             if(list[i]>max)
54             {
55                 max=list[i];
56             }
57         }
58         System.out.print("子数组和的最大值为:"+max);
59     }
60 }
61     

三、运行结果截图:

四、心得体会和总结

  我们组的两个人是我王雪青和陆宇,这个题目的实现方法是陆宇想到的,然后程序是由我编写的,程序中的问题是我们两个一起解决的。这个程序基本实现了题目中的要求,但是时间复杂度不满足要求,今后我们会对这方面做改进,使程序更加完善。

时间: 2024-12-21 02:40:31

软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)的相关文章

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

一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 1.首先随机产生一个数组,该数组里有正数也有负数. 2.从数组中第一个元素a[0]开始,依次计算a[0].a[0]+a[1].a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值. 3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值.依次循

3月27号周五课堂练习:结对开发----返回一个整数数组中最大子数组的和三

一.题目要求 1.1输入一个整形数组,数组里有正数也有负数. 1.2数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 1.3如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 1.4同时返回最大子数组的位置. 1.5求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.源代码 #include<iostream> #include<time.h> #include<conio

3月24号周二课堂练习:结对开发----返回一个整数数组中最大子数组的和二

一.题目要求 1.1要求程序必须能处理1000 个元素: 1.2每个元素是int32 类型的: 1.3输入一个整形数组,数组里有正数也有负数. 1.4数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 1.5求所有子数组的和的最大值.要求时间复杂度为O(n). 二.源代码 #include<iostream> #include<time.h> #include<conio.h> #define N 100000 using namespace std; v

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

日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料   日总计 周一 100   10 30 140 周二   120   30 150 周三   30 10 10 50 周四 100 20     120 周五   120    30 150 周六   45 60 10 155 周日           周总计 200 335 80 110 765 时间记录日志 3/21 日期 开始时间 结束时间 中断时间 净时间 活动 备注 3/21 14:00 15:50 10 100 听课

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

#include<iostream>using namespace std;int max(int a,int b){ if(a>b) {return a;}else{ return b;}}int maxsum(int a[],int n){ int i;int maxsofar=0;int maxendinghere=0;for (i=0;i<n;i++){maxendinghere=max(maxendinghere+a[i],0);maxsofar=max(maxsofar

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

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

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

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

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

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 1.定义一个大小为10的数组,接受任意十个自然正数: 2.分别将连续的一个数,两个数,......,组合成子数组,分别求出包含一个元素的数组的最大值,两个元素的,三个元素的,......,然后再比较这十组的值,求出最大值,即为所求: 3.单独判断一些特殊的

软件工程课程作业(四)--返回一个整数数组中最大子数组的和

伙伴链接:http://www.cnblogs.com/haoying1994/ 一.设计思想 本实验要求输入一个正负数混合的整型数组,长度不限,在此数组的所有子数组中找到和最大的数组,并求出相应数组的和,且时间复杂度为O(n).我们在课堂上共同讨论了多种解决方案,这些将在下面可能的解决方案中展示,在听了同学的思路和老师的讲解之后, 我们最终选取了老师课堂上描述的比较简便的思路.如下: 在输入数组的环节,采用for无限循环加if判断截止,直到触发回车键为止,将数组记录到Array中,数组长度记录