1. 程式人生 > >Algorithm:求最大連續子陣列

Algorithm:求最大連續子陣列

1、最大連續子陣列
給定一個數組A[0,…,n-1],求A的連續子陣列,使得該子陣列的和最大。

(1)、code暴力法  O(n3)
時間複雜度O(n3)

(2)、分治法   O( n*log(n) )
將陣列從中間分開,那麼最大子陣列要麼完全在左半邊陣列,要麼完全在右半邊陣列,要麼跨立在分界點上。
完全在左陣列、右陣列遞迴解決。
跨立在分界點上:實際上是左陣列的最大字尾和右陣列的最大字首的和。因此,從分界點向前掃,向後掃即可。
分治演算法複雜度


(3)、分析法   O(n)
邏輯推理的演算法應用

(4)、動態規劃法  O(n)
記S[i]為以A[i]結尾的陣列中和最大的子陣列則:S[i+1] = max(S[i]+A[i+1], A[i+1])
S[0]=A[0]
遍歷i: 0≤i ≤n-1
動態規劃:最優子問題
時間複雜度:O(n)

相關推薦

Algorithm連續陣列

1、最大連續子陣列 給定一個數組A[0,…,n-1],求A的連續子陣列,使得該子陣列的和最大。 (1)、code暴力法  O(n3) 時間複雜度O(n3) (2)、分治法   O( n*log(n)

python連續陣列

尋找最大子陣列問題: 給定陣列A:尋找A中的和最大的非空連續子陣列。我們稱這樣的連續子陣列為最大子陣列(maximum subarray) 1、暴力求解:兩個迴圈,時間複雜度為O(n^2) 2、用分治策略的求解方法: 假定我們要尋找子陣列A[low...high]的最大子陣列。使用分

演算法之連續陣列

假設給定一陣列{1,4,2,-3,-1,2,5,6,-8,9},我們要求的是最大的連續子序列的和,如果採用暴力破解法的話,那就是遍歷所有的連續子序列了,時間複雜度就是O(N^3)程式碼如下: private int max = Integer.MIN_VALUE; public int ma

連續陣列和的

題目描述:給定一個數組A[0,....,n-1],求A的連續子陣列,使得該子陣列的和最大。eg:  1,-2,3,10,-4,7,2,-5的最大子陣列為3,10,-4,7,2演算法分析:記S[i]為以A[i]結尾的陣列中和最大的子陣列,則S[i+1]=max(S[i]+A[i

面試題,一個整數陣列中和連續陣列,例如[1, 2, -4, 4, 10, -3, 4, -5, 1]的連續陣列是[4, 10, -3, 4](需寫明思路,並程式設計實現)

php實現: function get_max_value($arr) { $max_sum=0;//最大的值 $max_start=0;//和最大子陣列開始下標 $max_end=

分治法給定陣列A[1:n]的連續陣列

演算法分析:將陣列從中間分開,則最大子陣列要麼完全在左半邊陣列,要麼在右半邊陣列,要麼跨立在中間的分界點上,如果完全在左或右半邊陣列,用遞迴解決,如果跨立在分界點上,則一定包含左半邊陣列的最大字尾和右半邊陣列的最大字首,因此可以從分界處向前後掃。 複雜度:時間複雜度O(nl

golang 陣列連續陣列

直接上程式碼了 //x.1 求數組裡最長連續字陣列 O(n)內 func MaxSerialArr(arr []int) []int { //總長 var max = 0 //集合點 var jointIndex = -1 //結果集

二維陣列連續陣列

#include "stdafx.h" #include "stdio.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* argv[]) { int x[3][3] = {0}; int sum = 0; int max = 0; int

劍指offer動態規劃---連續序列的和

問題描述:給一個數組,返回它的最大連續子序列的和 例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。 演算法思想:當全為正數的時候,問題很好解決。但是,如果陣列中包含負數,是否應該向後擴充套件某個負數,並期望負數後面的

(4)C語言——連續序列和

log spa clas 最大連續子序列和 alloc 最大 code max 連續 題目: 輸入一組整數,求出這組數字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那個序列。例如: 序列:-2 11 -4 13 -5 -2,則最大子序列和為20。 序列:-

53 連續陣列

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 

連續陣列

題目: 給定一個數組 A[0,1..... ,n-1],求A的連續子陣列,使得該子陣列的和最大。 例如:   陣列: 1,-2,3,10,-4,7,2,-5   最大子陣列: 3,10,-4,7,2   解法1:(暴力code)    1 public class M

連續序列的和,時間複雜度為 O(n)

練習題目 給定陣列 [ a0, a1, a2, …, an ] ,找出其最大連續子序列和,要求時間複雜度為 O(n),陣列包含負數。 例如:輸入 [ -2,11,-4,13,-5,-2] ,輸出 20(即 11 到 13)。 解答 關於這個問題有很多種解法,這裡介紹一種時間複雜度僅為 O(n)

一維、二維 連續陣列

    演算法導論中的一個題目,上次面試題中被擴充套件到了二維和二維環形陣列,記錄下以供參考。一、    一維連續子陣列 最大和    問題描述:給定一個一維陣列,求其中連續子陣列和的最大值。    樣

連續陣列問題

題意描述:題目意思是說給定一個正數陣列num[]和一個值key,求滿足和為key最長的子陣列的長度【與求連續子陣列的最大和互為姊妹題】 解題思路:暴力解法肯定可以求解,如下所示: int getMax

演算法分析-連續陣列(分治策略)

大家好,我是三十三,第一次寫部落格,有什麼考慮不周的,請廣大同學多多指正。作為一個計算機專業毛都不會的即將畢業狗,說實話,心裡一點有一絲絲慌慌的。在即將畢業之際,自己還是想囤點貨給自己貼貼金,有啥錯誤還望指出。一、 實驗目的及任務分治法求解最大子陣列問題二、 實驗環境c++或

演算法學習-零陣列連續陣列

題目 對於長度為N的陣列A,求連續子陣列的和最接近0的值。 如: 陣列A:1,-2,3,10,-4,7,2,-5 它是所有子陣列中,和最接近0的是哪個? 演算法流程 申請比A長1的空間sum[-1,0,...,N-1],sum[i]是A的前i項和。定義sum[-

阿裏筆試題兩個子序列的連續序列

代碼 else nat 順序 post string popu substr 連續 原題例如以下: 給定一個query和一個text。均由小寫字母組成。要求在text中找出以相同的順序連續出如今query中的最長連續字母序列的長度。比如。query為 "acbac",t

一個整數數組中和連續數組,例如[1, 2, -4, 4, 10, -3, 4, -5, 1]的連續數組是[4, 10, -3, 4](需寫明思路,並編程實現)

class col code pan IT [] 例如 exit arr $arr = [ 1 , 2 , -4 , 4 , 10 , -23 , 4 , -5 , 1]; $max_sum = 0; $sum=0; $new = []; $i =

[珠璣之櫝]字串和序列左移、雜湊、長重複序列的字尾陣列解法、連續序列

  字串和陣列在儲存上是類似的,把它們歸為同一主題之下。本文主要介紹三大類問題和它們衍生的問題,以及相應演算法。   本文主要介紹和討論的問題和介紹的演算法(點選跳轉): 字串迴圈移位(左旋轉)問題 問題敘述:   將一個n元一維向量向左旋轉i個位置。例如,當n=8且i=3時,"abcde