題目:
find the contiguous subarray within an array (containing at least one number) which has the largest sum.
for example, given the array[−2,1,−3,4,−1,2,1,−5,4]
,
the contiguous subarray[4,−1,2,1]
has the largest sum =6
.題解:
比較經典的乙個問
題,是學習的好材料。
解1:窮舉,o(n²)複雜度,意料中的超時。
public class solution
return maxsub;
}}
kadane演算法 :原理:
將陣列從左到右分割為若干子串,使得除了最後乙個子串之外,其餘子串的各元素之和小於0,且對於所有子串nums[i...j]和任意k(i<=k<j),有nums[i...k]的和大於0。滿足條件的和最大子串,
只能是上述某個子串的字首,而不可能跨越多個子串。
原理詳細可參考:
執行流程:從頭到尾遍歷目標陣列,將陣列分割為滿足上述條件的子串,同時得到各子串的最大字首和,然後比較各子串的最大字首和,得到最終答案。
以array=為例,通過遍歷,可以將陣列分割為如下3個子串(-2),(1,-3),(4,-1,2,1,-5,4),這裡對於(-2)這樣的情況,單獨分為一組。各子串的最大字首和為-2,1,6,所以目標串的最大子串和為6。
public class solution
return max_so_far;
}}
解3:分治法:
最大子串和的區間有以下三種情況(low,high分別為左右邊界,mid為(low+high)/2):
(1) 區間完全在 a[low,mid-1];
(2)
區間完全在
a[mid+1,high];
(3) 區間包含有 a[mid],
等價於從中間元素開始往左累加的最大值 + 從中間元素開始往右累加的最大值
public class solution
public int divide(int nums, int low, int high)
tmp = mmax;
for(int i = mid+1; i <= high; i++)
return math.max(mmax, math.max(lmax, rmax));
}}
最大子串和問題(Maximum Subarray)
又乙個經典問題,對於乙個包含負值的數字串array 1.n 要找到他的乙個子串array i.j 0 i j n 使得在array的所有子串中,array i.j 的和最大。這裡我們需要注意子串和子串行之間的區別。子串是指數組中連續的若干個元素。子串行只要求各元素的順序與其在陣列中一致,而沒有連續的...
演算法題LC97 maximum subarray
貪心 題目描述 請計算給出的陣列 至少含有乙個數字 中具有最大和的子陣列 子陣列要求在原陣列中連續 例如 給出的陣列為 2,1,3,4,1,2,1,5,4 子陣列 2,1,3,4,1,2,1,5,4 具有最大的和 6.拓展 如果你已經提出了o n 的解決方法,請嘗試使用分治演算法來解決這道題。這道題...
53 執行緒池
一般在web服務端使用執行緒池是比較常見的,本節呢,就已以實現乙個簡單的web服務端為目標,僅僅實現get請求,最多在加上post請求.如果對web服務端並不熟悉的,可以回過頭去看一下http請求與應答以及乙個500行左右的web服務端原始碼tinyhttpd 整理了原始碼以及修改和加注釋後的lin...