Maximum Subarray
2016, Apr 30
Maximum Subarray
@(算法)[算法, Greedy, Enumeration, LinkedIn, Subarray, Array, Linkedin]
这一题怎样用一句话描述?
找出数组中的和最大的子数组(连续)
用到什么算法?什么数据结构?
动态规划,数组
通过这题学到了什么?
这一题,首先问法就是“找到……的最优解”,可以考虑使用动归。动归的思路如下:
设 f[i] 表示以下标为 i 的元素结尾的所有子数组里,数组和最大的那个的值。这一题是典型的坐标型动态规划,因为有“以……结尾”这一句话。那么 f[i] 的值由谁决定呢?很容易想到,f[i] 有可能等于 f[i - 1] + nums[i],f[i] 不可能等于 f[i - 1],因为数组必须连续。但是如果 f[i - 1] + nums[i] 比 nums[i] 本身还要小,还不如直接取 nums[i],所以就又了递推方程:
f[i] = {f[i - 1] + nums[i], f[i - 1] + nums[i] > nums[i]}
f[i] = {nums[i], f[i - 1] + nums[i] <= nums[i]}
然后在所有的 f[i] 中找到最大值即可
可能(已经)遇到的BUG有?
递推公式想错。采用暴力法行不通。