您的位置:首页 > 编程语言 > Java开发

Java实现算法之--求子数组和的最大值

2017-04-14 22:54 274 查看
之前笔试的时候碰到了这个题目

然后总是通过50%的测试,就很气,为啥总不能全部100%输出正确答案呢

题目描述
输入一个整形数组。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
输入

给定一个数组,包含若干个整数。

样例输入

1 -3 5 5 -6 -2 -7

输出

测试数组中子数组所能产生的最大和

样例输出

10

后来才发现啊,原来我忽略了一个重要的问题,那就是max的取值范围,初始化的时候不能设置为0啊

当数组的值全为负数时,max就不能设为0了

得设成负数最小值,于是代码完美通过

代码如下:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Test_数组最大和 {

/* 请完成下面这个函数,实现题目要求的功能 */
/* 当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */
/****************************** 开始写代码 ******************************/
static int maxSum() {
int[] a = new int[7];
Scanner in = new Scanner(System.in);
for (int i = 0; i < 7; i++) {
a[i] = in.nextInt();
}
int max = Integer.MIN_VALUE;
int sum = 0;
int sumsum = 0;

// 求数组总和
for (int i = 0; i < a.length; i++) {
sumsum += a[i];
}

for (int i = 0; i < a.length; i++) {
sum = 0;
for (int j = i ; j < a.length; j++) {
sum += a[j];

if (sum >= max) {
max = sum;

}

if (sum == sumsum)
continue;
}
}
return max;
}

/****************************** 结束写代码 ******************************/

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int res;
int maxTest = Integer.MIN_VALUE;
System.out.println("" + maxTest);

res = maxSum();
System.out.println(String.valueOf(res));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: