標籤:style blog http color io for cti ar
本文部分參考Discuss: LeetCode.
步驟1. 選擇數組的中間元素. 最大子序列有兩種可能: 包含此元素/不包含.
步驟2.
步驟2.1 如果最大子序列不包含中間元素, 就對左右子序列進行步驟1.
步驟2.2 如果最大子序列包含, 則結果很簡單, 就是左子列的最大尾碼子列(即包含左子列最後一個元素--中間元素)加上右子列的最大首碼子列(即包含右子列第一個元素--中間元素)
步驟3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值).
1 class Solution { 2 public: 3 int maxSubArray(int A[], int n) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 if(n==0) return 0; 7 return maxSubArrayHelperFunction(A,0,n-1); 8 } 9 10 int maxSubArrayHelperFunction(int A[], int left, int right) {11 if(right == left) return A[left];12 int middle = (left+right)/2;13 int leftans = maxSubArrayHelperFunction(A, left, middle);14 int rightans = maxSubArrayHelperFunction(A, middle+1, right);15 int leftmax = A[middle];16 int rightmax = A[middle+1];17 int temp = 0;18 for(int i=middle;i>=left;i--) {19 temp += A[i];20 if(temp > leftmax) leftmax = temp;21 }22 temp = 0;23 for(int i=middle+1;i<=right;i++) {24 temp += A[i];25 if(temp > rightmax) rightmax = temp;26 }27 return max(max(leftans, rightans),leftmax+rightmax);28 }29 };