软件工程子数组求和2

1.设计思想:首先想到首尾相连和不相连的区别在哪?区别在最后一个数还可以和前面的数组成一个新的数组;然后就是怎样考虑

用数组储存首尾相连的数组,是否需要加入其他限制条件等?

2.出现的问题:首尾相连数组无法同其他数组一样储存到一个数组中。

4.源代码:

package 子数组求和2;

import java.util.Scanner;

public class test {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("请输入数组中数字的个数:");
int n=scan.nextInt();
int[] a=new int [n];
System.out.print("请输入数组:");
for(int i=0;i<n;i++)
{
a[i]=scan.nextInt();
}
int a1=findMaxSum(a,n);
int b,temp,i,sum=0;
for(b=1;b<n;b++)
{
temp=a[0];
for(i=1;i<=n-1;i++)
{
a[i-1]=a[i];
}
a[n-1]=temp;
if(findMaxSum(a,n)>=sum)
{
sum=findMaxSum(a,n);
}
}
int a2=sum;
if(a1>=a2)
{
System.out.println("最大子数组和:" + a1);
}
else
{
System.out.println("最大子数组和:" + a2);
}

}
public static int findMaxSum(int a[],int n)
{
int sum=0;

int b=0;

for(int i=0; i<n; i++)
{
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}
}

时间: 2024-11-12 02:55:12

软件工程子数组求和2的相关文章

lintcode循环数组之连续子数组求和

v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. v 样例 给定 [3, 1, -100, -3, 4], 返回 [4,0]. v 思路 1.如果不是循环数组,求解连续子区间和的思路如下: 首先设一个累加变量和sum和最大值变量maxN,[ld, rd]表示当前正在累加的区间,[lt,rt]表示最大和的区间.从左边开始一直累加,并初始当前区间[ld

最大二维子数组求和~

题目:输入一个整形数组,数组里有正数也有负数.组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 分析: 这样就很复杂我们可以选取其中的正数然后判断连续性当我们加上一个正数时,和会增加:当我们加上一个负数时,和会减少.如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和,用一个变量记录最大的和,最后返回即可. 代码: public class 二维子数组最大和 { public

402. 连续子数组求和

给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的下标.(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, 1, 3, -3, 4], 返回[1,4]. 想清楚这个问题这道题就差不多有解了:"什么时候更新start(第一个数字下标)和end(最后一个数字下标)?" 首先很直接的可以联想到用动态规划来做这个题,用一个vector来存每个位对应的到此位为止的最大子数组和 那么令F[n]表示为到n为止的最大子数组和,可

子数组求和之大数溢出

题目: 返回一个占内存较多的数组的最大子数组. 要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 思想: 老师要求主要是解决内存溢出问题,所以我写的只是一种测试,可能和题目不符,但思路应该一样,就是把大数字一分为二,就像计算机中的高八位低八位一样,我假设一个数字最大表示范围为0~100,如果想要表示9856,那么就用98后面的跟上56来表示,然后高位有正负,求最大子数组,将结果放大相应倍数 加上对应的低位数字 程序源代码: #include<io

最大联通子数组求和

设计题目:求一个二维数组的连通的数组中和最大的最大值. 设计思路: 先建立二维数组并遍历二维数组,将所有的正整数进行分块,然后验证是否联通,如果不联通,则判断路径. 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 5

环状二维子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

lintcode 中等题:continuous subarray sum 联系子数组之和

题目 连续子数组求和 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, 1, 3, -3, 4], 返回[1,4]. 解题 法一:直接暴力,时间复杂度O(N2),时间超时 public class Solution { /** * @param A an integer array * @return A list of integers includes the i

求环形连续子数组的和的最大值

课上老师把连续子数组求和的题目改为让子数组首尾相接再求最大子数组的和. 我的处理方法:新建一个二倍原数组长度b的数组d[  ],然后从d[0]到d[b]分别生成b个分数组,再分别求子数组和,再比较. package wodeshiyao; import java.util.Scanner; public class shiyan321 { static Scanner scan=new Scanner(System.in); public static void main(String[] ar

最大连续子数组和与JUnit测试

[题目]最大连续子数组和(最大子段和) 背景 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为:Max{0,a[i]+a[i+1]+-+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20. -- 引用自<百