題目:
連續子串行最大和,其實就是求乙個序列中連續的子串行中元素和最大的那個。
比如例如給定序列:
其最大連續子串行為,最大和為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 ...