最大子序和
給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
暴力:
class
solution
}return max;}}
;
貪心:
int
maxsubarray
(vector<
int>
& nums)
return max;
}
//分治
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);}
};
//分治
intmaxsubarray
(vector<
int>
& nums)
intmaxsubarrayhelper
(vector<
int>
&nums,
int left,
int right)
intfindmaxcrossingsubarray
(vector<
int>
&nums,
int left,
int mid,
int right)
sum =0;
for(
int j = mid+
1; j <= right;
++j)
return
(rightres+leftres)
;}
LeetCode53最大子序和
給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...
LeetCode 53 最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。這道題本來是能做出...
LeetCode 53 最大子序和
題目鏈結 題目描述 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。解決方法 解題思路 動態規劃,複雜度為 o n 令dp i 表示最後一項為...