`
云之遥
  • 浏览: 8637 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

O(n)最大子序列问题

阅读更多
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;
	}
}
分享到:
评论

相关推荐

    最大子序列之和C++实现常数时间

    通常,最大子序列和问题通过 Kadane's Algorithm(卡丹算法)可以在线性时间内O(n)解决,但实现常数时间的解决方案则需要特别的优化。然而,应该注意的是,对于大多数情况,常数时间复杂度是不现实的,因为至少需要...

    最大子序列求和最大子序列求和

    标题和描述均提到了“最大子序列求和”,这是一个经典的计算机科学问题,主要涉及寻找一个序列(通常是数组)中连续子序列的最大和。这个问题在多种领域都有应用,如数据分析、金融风险管理、生物信息学等。文章中...

    最大子序列问题算法分析.doc

    最大子序列问题算法分析 最大子序列问题是计算机科学中的一种经典问题,旨在寻找给定整数序列中最大子序列的和。该问题可以使用多种算法来解决,包括穷举法、递归法等。在本文中,我们将对最大子序列问题的算法进行...

    最大子序列和问题的求解.md

    ### 最大子序列和问题详解 #### 一、引言 最大子序列和问题是一个经典的计算机科学问题,涉及在一串整数(其中可能包括负数)中找到具有最大和的连续子序列。此问题不仅在理论研究中有重要意义,在实际应用如生物...

    最大子段和(分治法)源码

    最大子段和问题是指给定一个由 n 个整数(可能有负整数)组成的序列(a1, a2, …, an),求该序列中的最大子段和。 知识点: 1. Maximum Subarray Problem:最大子段和问题是指给定一个由 n 个整数(可能有负整数...

    PHP求最大子序列和的算法实现

    从标签“最大子序列”可以推断出,我们需要关注的是序列中的连续子集,而不是单独的元素,而且我们要找的是这些子集中和最大的那一个。 代码中定义了一个名为`getmaxsum`的函数,它接收一个数组作为参数,然后通过...

    西南交通大学-算法分析与设计-实验5.4实验报告包含预习部分-求最大子序列-求最大子矩阵

    最大子序列和问题是一维数组中最长的连续子序列,使得子序列的和最大。最大子矩阵和问题是在二维矩阵中找到一个矩形区域,其内部元素之和最大。 1. **最大子序列和算法**: 在动态规划方法中,我们通常使用Kadane'...

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

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

    最长子列问题C语言实现

    本文介绍了如何使用C语言解决最大子序列和问题,包括问题的背景、核心概念、代码解析及优化思路。通过对这些知识点的学习,读者可以更好地理解并掌握此类问题的解决方法,为后续深入学习算法打下坚实的基础。

    Java求最大子列问题(输出最长子列)

    Kadane's Algorithm 是一种在 O(n) 时间复杂度内解决最大子序列和问题的有效方法,其中 n 代表数组的长度。它的核心思想是通过遍历数组,维护两个变量:当前子序列的和以及到目前为止找到的最大子序列和。对于每个...

    最大子矩阵和问题.doc

    - 使用最大子序列和算法找到 \(B\) 中的最大子序列和,并将其存储在变量 `max` 中。 - 如果 `max` 大于 `sum`,则更新 `sum` 为 `max`。 4. 返回 `sum` 作为结果。 #### 四、示例解析 以题目提供的示例为例: -...

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

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

    最大子段和问题实验报告.docx

    具体实现时,我们需要计算左半部分的最大子序列和`leftSum`,右半部分的最大子序列和`rightSum`,以及跨越分割点的最大子序列和`midSum`。最后,返回这三个最大值中的最大者。分治法的时间复杂度可以达到O(n log n)...

    PTA习题:中国大学MOOC-陈越、何钦铭-数据结构-2017秋1

    * 最大子序列和问题的解决方法 * 时间复杂度的分析 线性结构 1. 两个有序链表序列的合并(15分) 这是一个典型的链表操作问题,要求学生合并两个有序链表。该问题的时间复杂度为O(n+m),其中n和m分别为两个链表的...

    算法-动态规划- 线性 DP- 最大和问题(包含源程序).rar

    在解决最大子序列和问题时,我们可以定义一个二维数组`dp`,其中`dp[i]`表示以第`i`个元素结尾的最大子序列和。初始时,`dp[0]`等于数组的第一个元素。对于后续的每个元素,我们有两种选择:不包括它,或者包括它。...

    课件5_5 P411

    1. **最大子序列和问题**:在给定的整数数组中,目标是找到一个子序列,使得该子序列的和最大。在这个问题中,数列可以是正数、负数或者零,但目标是找到非负和的最大子序列。 2. **动态规划策略**:我们可以使用一...

    max_sum.rar_SUM_max_sum

    在编程领域,"max_sum.rar_SUM_max_sum" 这个标题和描述涉及到的是一个经典的算法问题,名为“最大子序列和”(Max Subarray Sum)。这个问题源自计算机科学中的动态规划和数组处理,常用于面试和算法竞赛中。下面将...

    max_batch.rar_batch

    这里我们关注的问题是寻找数组中和最大的子块,也称为“最大子序列和”问题。这是一个经典的动态规划问题,经常出现在算法设计和分析中。给定的标题“max_batch.rar_batch”暗示了这个任务可能与批量处理相关,可能...

Global site tag (gtag.js) - Google Analytics