`

连续子序列最大和问题

阅读更多

连续子序列最大和问题:下面列出了立方求解、平方求解以及线性求解算法。

/**
 * 
 * @author wawlian
 * 连续子序列最大和问题
 *
 */

public class MaxSubSequence {
	
	//标注子序列起始位置
	private static int seqStart = 0;
	
	//标注子序列终止位置
	private static int seqEnd = 0;
	
	/**
	 * 连续子序列最大和问题的立方求解算法
	 * @param a 整数序列组成的数组
	 * @return 最大子序列之和的值
	 */
	public static int maxSubSequenceSum(int[] a) {
		int maxSum = 0;
		//用i来标记每个序列的起始位置
		for(int i = 0; i < a.length; i++) {
			//用j来标记每个序列的终止位置
			for(int j = 0; j < a.length; j++) {
				int thisSum = 0;
				for(int k = i; k <= j; k++) {
					thisSum += a[k];
					if(thisSum > maxSum) {
						maxSum = thisSum;
						seqStart = i;
						seqEnd = j;
					}
				}
			}
		}
		return maxSum;
	}
	
	/**
	 * 连续子序列最大和问题的平方求解算法
	 * @param a 整数序列组成的数组
	 * @return 最大子序列之和的值
	 */
	public static int maxSubSequenceSum1(int[] a) {
		int maxSum = 0;
		for(int i = 0; i < a.length; i++) {
			int thisSum = 0;
			for(int j = i; j < a.length; j++) {
				thisSum += a[j];
				if(thisSum > maxSum) {
					maxSum = thisSum;
					seqStart = i;
					seqEnd = j;
				}
			}
		}
		return maxSum;
	}
	
	/**
	 * 连续子序列最大和问题的线性求解算法
	 * @param a 整数序列组成的数组
	 * @return 最大子序列之和的值
	 */
	public static int macSubSequenceSum2(int[] a) {
		int maxSum = 0;
		int thisSum = 0;
		for(int i = 0, j = 0; j < a.length; j++) {
			thisSum += a[j];
			if(thisSum > maxSum) {
				maxSum = thisSum;
				seqStart = i;
				seqEnd = j;
			}
			else if(thisSum < 0) {
				i = j + 1;
				thisSum = 0;
			}
		}
		return maxSum;
	}	
}

 

分享到:
评论

相关推荐

    连续子序列最大和与乘积问题的分析

    连续子序列最大和问题(也称为“最大子数组和问题”)的目标是找到一个数组中的连续子数组,使得其和最大。最著名的解法是 Kadane's Algorithm。该算法以O(n)的时间复杂度完成,遍历一次数组,同时记录当前子数组的...

    计算机算法分析与设计最大连续子序列

    计算机算法分析与设计最大连续子序列 计算机算法分析与设计最大连续子序列是计算机...解决该问题需要使用动态规划法,读取输入数据,记录最大和和历史最大的和,并输出最大和、最大连续子序列的第一个和最后一个元素。

    最大连续子序列和

    最大连续子序列和问题是一个经典的问题,经常出现于面试中。为了解决这个问题,我们可以使用多种方法来解决,下面我将详细介绍三种常见的解法。 解法 1:O(N^2)解法 这个解法的思路是遍历数组中的每一个位置,从这...

    求解子序列的最大和问题

    文件给出了四种方式求解子序列的最大和,并给出了具体的代码实现。对于深入探讨算法和程序性能非常有帮助。

    算法实验-串匹配问题-采用分治法求解最大连续子序列和问题-用分治策略求众数问题-最近点对问题

    在本实验中,我们将探讨四个核心的算法问题:串匹配问题、最大连续子序列和问题、求众数问题以及最近点对问题。这些问题都属于算法设计与分析的范畴,通过解决这些问题,我们可以深入理解分治法和其他算法策略。 1....

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法 本文档总结了解决最长公共子序列(LCS)问题的三种解法,针对连续子序列的情况。LCS 问题有两种定义子序列的方式:一是子序列不要求连续,二是子...

    C++求最大子序列的和

    C++求最大子序列的和 问题:求一个数组 / 序列的满足条件的子数组 / 子序列。 条件: 1. 子数组必须是连续的。 2. 求和即可,不需要返回子数组是哪段。 3. 数组元素为整数。

    3种方法求 最大连续子序列和

    解法1—O(N^2)解法 解法2—O(NlgN)解法 解法3—O(N)解法 可以直接在记事本运行

    三种方法实现最大连续子序列

    三种方法实现最大子序列,时间复杂度分别是O(n^3),o(n^2),o(n)

    一个整数序列,求最大子序列的和C++

    一个整数序列,求最大子序列的和,C++,The max sub sum of an array.

    Python语言描述最大连续子序列和

    在编程领域,特别是数据分析和算法设计中,"最大连续子序列和"问题是一个经典的问题,它经常出现在面试和算法竞赛中。这个问题的核心是找到一个数组(在Python中通常表示为列表)中的最大连续子集,使得这个子集的...

    动态规划最大子序列和 Gabe

    在输出结果时,如果 max 大于或等于 0,我们就输出最大和、最大连续子序列的第一个和最后一个元素。否则,我们就输出整个序列的首尾元素。 在编写程序时,我们使用 C 语言来实现动态规划算法。我们首先定义了一个...

    数组最大子序列和程序

    数组 求连续子序列最大和程序 时间复杂度O(n) 空间复杂度O(1)

    zyq2652192993zyq#Advance-Algorithm#动态规划——最大连续子序列和1

    动态规划——最大连续子序列和一维最大连续子序列和[x] LeetCode 53 Maximum Subarray设$d[i]$表示以序列中$s[i]$结尾的最大

    非递增顺序的最小子序列(非连续子序列)1

    这个问题的定义是找到数组的一个子序列,使得这个子序列的元素之和严格大于剩余元素的和。题目中给出的示例和代码提示我们可以通过排序来找到这个子序列。 首先,我们理解题目中的关键点: 1. **子序列**:子序列不...

    单调递增子序列 最大连续子段和

    **定义**:在给定的一维数组中寻找具有最大和的连续子数组,并返回这个最大和。 **应用场景**: - 数据分析:用于从一系列数据中提取最有价值的部分。 - 机器学习:在训练过程中,可以用来检测模型性能的最大提升...

    利用C语言来求最大连续子序列乘积的方法

    标题中的知识点是利用C语言求解最大连续子序列乘积,描述中提到这是一个与ACM竞赛相关的题目,涉及浮点数序列。标签指出是关于C语言和子序列的问题。部分内容详细介绍了三种解法,分别是穷举法、特殊处理负数和0的...

    最大子段和问题 蛮力法 分治法 动态规划法

    最大子段和问题是一个经典的计算机科学中的算法问题,它的目标是找到一个整数数组中连续子数组的最大和。这个问题在很多实际应用中都有所体现,比如在数据分析、股票投资策略等领域。下面我们将深入探讨解决这一问题...

    PTA丨最长连续递增子序列

    在编程和算法领域,...总结来说,“PTA丨最长连续递增子序列”是一个经典的问题,通过解决它可以深入理解动态规划的思想和应用,同时锻炼编程能力和算法思维。对于程序员来说,掌握这种问题的求解方法是十分有益的。

Global site tag (gtag.js) - Google Analytics