Java实现算法之--求子数组和的最大值
2017-04-14 22:54
274 查看
之前笔试的时候碰到了这个题目
然后总是通过50%的测试,就很气,为啥总不能全部100%输出正确答案呢
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
后来才发现啊,原来我忽略了一个重要的问题,那就是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));
}
}
然后总是通过50%的测试,就很气,为啥总不能全部100%输出正确答案呢
题目描述输入一个整形数组。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
输入 给定一个数组,包含若干个整数。 | 样例输入 1 -3 5 5 -6 -2 -7 |
输出 测试数组中子数组所能产生的最大和 | 样例输出 10 |
当数组的值全为负数时,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));
}
}
相关文章推荐
- Java实现求子数组和的最大值算法示例
- Java实现算法之--求子数组和的最大值
- 【LeetCode-面试算法经典-Java实现】【053-Maximum Subarray(最大子数组和)】
- 最大子数组和算法(Java实现)
- Java实现:求子数组的最大和(数组)
- 【LeetCode-面试算法经典-Java实现】【152-Maximum Product Subarray(子数组的最大乘积)】
- 算法学习之路:分治策略-最大子数组-java实现
- 【LeetCode-面试算法经典-Java实现】【053-Maximum Subarray(最大子数组和)】
- 【算法总结-DP】求子数组的最大和
- 基于java数组的DES加密、解密的算法实现
- 每天一道算法题3 求子数组的最大和
- 微软等数据结构+算法面试100题(44)-- 求子数组的最大和
- 一维数组及子数组最大和问题Java实现
- 算法讨论(二)---求子数组的最大和
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 算法习题4:求子数组的最大和
- 算法学习之最大子序列算法(java实现)
- 算法--将数组分成和相等的多个子数组,求子数组的最大个数
- 三种算法实现最大子段和问题(Java实现)
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组