給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:
輸入:[-2
,1,-
3,4,
-1,2
,1,-
5,4]
輸出:6
解釋: 連續子陣列 [4,
-1,2
,1] 的和最大,為 6。
高階:如果你已經實現複雜度為 o
(n) 的解法,嘗試使用更為精妙的分治法求解。
class
solution
else
ans=math.
max(ans,sum);}
return ans;
}}
方法1:分治法
class
solution
intmaxsubarrayhelper
(vector<
int>
&nums,
int left,
int right)
int mid =
(left + right)/2
;int leftsum =
maxsubarrayhelper
(nums, left, mid)
;//注意這裡應是mid + 1,否則left + 1 = right時,會無線迴圈
int rightsum =
maxsubarrayhelper
(nums, mid +
1, right)
;int midsum =
findmaxcrossingsubarray
(nums, left, mid, right)
;int result =
max(leftsum, rightsum)
; result =
max(result, midsum)
;return result;
}int
findmaxcrossingsubarray
(vector<
int>
&nums,
int left,
int mid,
int right)
int rightsum = int_min;
sum =0;
//注意這裡i = mid + 1,避免重複用到nums[i]
for(
int i = mid +
1; i <= right; i++
)return
(leftsum + rightsum);}
};
53 最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。兩個變數,乙個是ans,用來儲存 更新子串行 乙個maxn,始終儲存著當前最大的子串行。子串行...
53 最大子序和
題目 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。思路 因為要考慮連續,所以需注意兩點,與當前比較的必定包含當前節點的上乙個節點,前n個節點...
53 最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。package le...