问题描述:
给定n个整数(可能为负数)组成的序列a1,a2,a3,...,an, 求该序列子段和的最大值
例如:
X={-2, 11, -4, 13, -5, -2}, 其最大子段和为20
最大子段为:11,-4,13
解法一:穷举法
列举所有的可能,求其中的最大值
算法实现如下:
/*
* description: 最大子段和问题
* 问题描述:给定n个整数(可能为负数)组成的序列a1,a2,a3,...,an,
* 求该序列子段和的最大值
* 解法一:穷举法,选取其中一个最大的值
*
* auther: cm
* date: 2010/11/19
*/
public class MaxSubSum
{
//穷举法
public static int maxSubSum1(int[] a)
{
int maxSum = 0;
for (int i = 0; i < a.length; i++)
{
for (int j = i; j < a.length; j++)
{
int sum = 0;
for (int k = i; k <= j; k++)
{
sum += a[k];
}
if (sum > maxSum)
{
maxSum = sum;
}
}
}
return maxSum;
}
//穷举法改进,减少一层循环
public static int maxSubSum2(int[] a)
{
int maxSum = 0;
for (int i = 0; i < a.length; i++)
{
int sum = 0;
for (int j = i; j < a.length; j++)
{
sum += a[j];
if (maxSum < sum)
{
maxSum = sum;
}
}
}
return maxSum;
}
public static void main(String[] args)
{
int[] a = {-2, 11, -4, 13, -5, -2};
//System.out.println(MaxSubSum.maxSubSum1(a));
System.out.println(MaxSubSum.maxSubSum2(a));
}
}
分享到:
相关推荐
【问题描述】使用分治递归算法解最大子段和问题,具体来说就是,将序列分为长度相等的左右两段,分别求出这两段的最大子段和,包含左右部分子段的最大子段和,求这三种情况得到的最大子段和的最大值。 【输入形式】...
求最大子段和
【问题描述】使用分治递归算法解最大子段和问题,具体来说就是,将序列分为长度相等的左右两段,分别求出这两段的最大子段和,包含左右部分子段的最大子段和,求这三种情况得到的最大子段和的最大值。 【输入形式】...
求一个整数序列的最大子段和,使用动态规划法,java语言实现
求一个字符串中连续最大子段和,数值可以为负数,必须是整数,算法设计与分析中的典型算法
简单易懂的一种求最大子段和的方法,希望能和大家一起讨论
蛮力法、分治法和动态规划法设计最大子段和问题的算法,一、试分别利用蛮力法、分治法和动态规划法求解最大子段和问题,要求写出C/C++程序实现和算法的效率分析。程序运行结果要同时给出最大子段和的值以及由哪个子段...
利用分治法求最大子段和问题,同时求出最优解,给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.代码实现
找出一个不全为负的整型数组的最大子段和,并输出起始位置
利用动态规划法求一个数组最大的子段和,并输出该最大字段(JAVA实现)
这个是本人在最算法分析实验之最大子段问题时用c#在visual studio 2005上写的一个小程序,能在可视化界面中输入序列,自动生成对应的最大子段。
Description 给定由n整数(可能为负数)组成的序列 {a1,a2,…,an},求该...你的输出应该有C行,即每组测试数据的输出占一行,它是计算出的最大子段和. Sample Input 1 6 -2 11 -4 13 -5 -2 Sample Output 20
/* 分治法思想:将一个n规模的问题分解成k个规模较小的子问题,并且这些子问题 之间都是相互独立的,通过递归求解这些子问题,然后将子问题的解合并,就可以 得到原问题的解。
这是一个java代码,用于求解最大字段和的问题
最大子段和是指在一个数组中找到一个连续的子段,使得该子段的所有元素之和最大。 解决这个问题的一种常用方法是使用动态规划。我们可以定义一个dp数组,其中dp[i]表示以第i个元素结尾的子段的最大和。根据动态规划...
给定由n整数(可能为负数)组成的序列 {a1,a2,…,an},求该序列形如...你的输出应该有C行,即每组测试数据的输出占一行,它是计算出的最大子段和. Sample Input 1 6 -2 11 -4 13 -5 -2 Sample Output 20 Source
是关于dp的,大家可以来看看 是我比较喜欢的 一系列最大和的讲解
B_(HDU_1231)(最大子段和,分治).cpp