分治策略
将问题分解成多个相同子问题,再合并子问题的解。
最大子序和(lc53)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
思路:
求一个数组的最大子序列和,可将问题分解为求这个数组前后各半的最大子序列和,这个数组的解就是前后2部分中的最大子序列和,和跨越这两部分的序列的最大子序列和,这三个和中的最大值。
递归求解:
- 确定终止条件:输入序列为一个数时,直接返回这个数值;
- 不断推进:将输入序列分解为两部分,继续递归求解;
- 设计法则:假设所有递归都可以正确运行!<不要人脑递归>
- 合成效益法则:不同的递归调用中不要做重复性工作。
时间复杂度分析:
- 主方法求解递归式
T ( n ) = a T ( n / b ) + f ( n ) , a 个 规 模 为 n / b 的 子 问 题 , f ( n ) 为 问 题 分 解 和 子 问 题 解 合 并 的 代 价 T(n)=aT(n/b)+f(n), a个规模为n/b的子问题,f(n)为问题分解和子问题解合并的代价 T(n)=aT(n/b)+f(n),a个规模为n/b的子问题,f(n)为问题分解和子问题解合并的代价
T ( n )