2019-11-28
leetcode: 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
1 | 输入: [-2,1,-3,4,-1,2,1,-5,4], |
首先,我们的第一个想法是所有可能是有穷的,暴力破解是ok的,但是想想就很麻烦,毕竟所有结果遍历一遍是指数递增的。所以我们就需要找到一些他的规律
- 定义一个函数f(n),以第n个数为结束点的子数列的最大和,存在一个递推关系f(n) = max(f(n-1) + A[n], A[n]);
- 将这些最大和保存下来后,取最大的那个就是,最大子数组和。因为最大连续子数组 等价于 最大的以n个数为结束
有了这样的规律(不能说都是网上找来的= =),就不难得到推导代码了
1 | class Solution(object): |
这一题说简单也简单,只要根据规律写代码就好了,但是说难也难,因为没有规律就要么暴力或者滑窗的方法就要麻烦许多,不得不感叹一下,数学大法好啊
咸鱼一直在鸽,外面风好大,咸鱼好害怕。