Best Time to Buy and Sell Stock

这是求最大子数组的问题,编码不难,有穷举、分治、动态规划三种方法。引起我兴趣的是分治的子问题划分和动态规划的最优子结构的证明。


分治:

从数组的中间分开,最大子数组出现的三种情况:

1、在左半部分

2、在右半部分

3、跨越中点(求跨越中点的子数组等价于求从中间元素开始往左累加的最大值 + 从中间元素开始往右累加的最大值


动态规划:

对于所有数组元素进行划分,如果加上该元素之前temp>0且temp+a[i]<0,那么该元素a[i]是一个边界,这样,数组会形成好多段,每段结束元素都满足temp>0且temp+a[i]<0.所以我们能得到多个划分块a[p..q],每个划分快的和是负值,划分块有这样的性质,对任意p<=i<q,显然,sum(a[p..i])>=0且sum(a[i..q])<0;根据划分块性质,容易证明,只要子数组横跨多个划分快,其求和值必定小于某个单独的划 分快中的数组求和

阅读更多
个人分类: leetcode
上一篇Swap Nodes in Pairs
下一篇&quot;House Robber&quot; and &quot;House Robber III&quot;
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭