連續最大子串行和的幾種演算法

2021-07-14 01:25:47 字數 1426 閱讀 1409

題目:

連續子串行最大和,其實就是求乙個序列中連續的子串行中元素和最大的那個。

比如例如給定序列:

其最大連續子串行為,最大和為20

思路:

1、暴力解決o(n^2)

從0開始遍歷,用max儲存最大子串和

public int maxsubarray1(int nums) }}

return max;

}

思路2:動態規劃

狀態轉移方程:dp[j] = max

public

intmaxsubarray2(int nums)

}return maxvalue;

}

思路3:

遍歷求和(貪心)

每次遍歷求和sum,如果sum<0,則sum=0,從當前位置開始遍歷求和。因為之前sum<0。每次求sum時要更新maxvalue

public

class

solution

if(sum

<0)

}return maxvalue;

}}

思路4:分治法o(nlogn)效果雖然沒有上面好,但想法不錯。

想法是:

比如 a b c d e d f g h

maxvalue = max,f(mid)}

l:的maxvalue

r:的maxvalue

f(mid):含有e的最大sum串。

t(n) = 2*t(n/2) + o(n)

public

class

solution

public

int getmax(int nums,int begin, int end)

if(begin>end)

int mid = (begin+end)/2;

int l = getmax(nums, begin, mid-1);

int r = getmax(nums, mid+1, end);

int maxleft = integer.min_value,maxright = integer.min_value;

intsum = 0;

for(int i = mid-1;i>=begin;i--)

}sum = 0;

for(int j = mid+1;j<=end;j++)

}int max = nums[mid];

max += (maxleft>=0?maxleft:0);

max += (maxright>=0?maxright:0);

return math.max(max, math.max(l,r));

}}

連續最大子串行的幾種解法

所謂最大連續子串行,就是求出給定一串數字中連續的那一段元素和的最大值。舉例如 給定序列 2 3 1 4 7 則最大子串行的值應為4 7 11.先說第一種方法 暴力列舉陣列中的元素,不斷求和,進行更新即可。可是時間複雜度上一般承受不了。o n 3 的時間複雜度確實對一般的問題很難接受。第二種 把a 0...

最大子串行和 連續

最大子串行和 連續 include using namespace std int maxsum int a,int n return sum int main 測試全是負數的用例 cout 4 cout 8 pause return 0 比如陣列 1,2,3,10,4,7,2,5 最大子串行和為1...

最大子串行和 連續or不連續

coding utf 8 created on sun oct 14 21 10 28 2018 author dell 功能 最大子串行問題 def test func num list 求陣列中最大子串行的和,子串行可以不連續 也可以寫成if判斷語句只累加整數即可 n len num list ...