package algorithm;
/**
* o(n)得到最大子序列问题
* @author sai
*
*/
public class MaxSubSequence {
public static Integer[] sequence = {10, -2, 3, 10, -4, 7, 2, -5};
public static void main(String[] args) {
maxSub();
}
public static Integer[] maxSub() {
int left = 0;
int right = 0;
int maxSum = sequence[0];
int midSeqSum = 0;
for (int i = 1; i < sequence.length; ++i) {
if (right == i - 1) {
if (sequence[i] >= 0) {
maxSum += sequence[i];
++right;
} else {
midSeqSum += sequence[i];
}
} else {
int sum = maxSum + midSeqSum + sequence[i];
if (sequence[i] >= maxSum && sequence[i] > sum) {
left = i;
right = i;
maxSum = sequence[i];
midSeqSum = 0;
} else if (sum >= maxSum && sum >= sequence[i]) {
right = i;
maxSum = sum;
midSeqSum = 0;
} else {
midSeqSum += sequence[i];
}
}
}
System.out.println("left = " + left + "; right = " + right + "\nsum = " + maxSum);
Integer[] result = new Integer[right - left + 1];
for (int i = 0; i < result.length; ++i) {
result[i] = sequence[left + i];
}
return result;
}
}
分享到:
相关推荐
2010.09.07 用分治法求解最大子序列问题。...《数据结构与算法分析 C++描述》p42最大子序列问题的递归方法代码 2010.09.07 vector a的内容: 4 -3 5 -2 -1 2 6 -2 最大子序列和是:11 请按任意键继续. . .
求最大子序列和的四个算法,通过对比,可以了解算法时间计算
动态规划算法:最大子序列问题
最大子序列问题算法分析.doc
利用C/C++语言解决最大子列和问题,在线处理-超简单的算法
C 最大子序列问题的几中算法-分治-联机算法
常数时间实现寻找整数序列的最大子序列之和,内附输入格式说明
最大子序列求和 c语言
最大子序列求和
最大子序列和问题(Maximum Subarray Sum Problem)是求解一个数组中连续子数组的和的最大值的问题。
最大子序列和问题,一个整形数组序列求一个不变顺序的相加最大和子序列。
最大子序列.pdf
C++算法_最大子序列和.zip
最大子序列算法[整理].pdf
#include using namespace std; void Maxsum(int n,int a[]){ int sum=0;... cout请输入整数序列的元素个数n"; cin>>n; cout请输入各元素的值:"; for(m=0;m<=n;m++) cin>>a[m]; Maxsum(n,a); }
示例 2:输出:1示例 3:输出:0示例 4:输出:-1示例 5:输出:-100000思路:动态规划,对数组进行遍历,当前最大子序列和为sum, 结果为ans/
详细解释动态规划问题中的一类问题的解法,并列举了一些例子
例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20序列; (-6,2,4,-7,5,3,2,-1,6,-9,10,-2)的最大子序列和为16。 3.用分治策略求众数问题 问题描述:给定含有n个元素的多重集合S,每个元素在...
最大子数组和问题可以通过动态规划算法来解决,时间复杂度为O(n),其中n为数组长度。 最大子数组和的具体步骤如下: 1. 定义两个变量max_sum和cur_sum,分别表示当前已经遍历到的最大子数组和和当前子数组和。 2....
分治策略求解最大子数组问题