Description:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
Solution:
一开始使用二重循环暴力解法,结果TLE了。
网上搜答,才醒悟是经典的动态规划,而动态规划题目讲求公式,只要得出i+1与i的关系,剩下的就是照葫芦画瓢了:
1.局部最优:local[i + 1] = max(nums[i], nums[i] + local[i])
2.全局最优:global[i + 1] = max(global[i], local[i + 1])
局部最优可以理解为第i个及其前面“最优”的和,所谓最优在此题中即为大于0的数,当计算到第i+1个时,如果第i个及其前面相加的和是负数的话,第i+1个为何不抛弃它们另起炉灶?即使第i+1个也是负数,但它只要相对更大,那么即是第i+1个的局部最优。(也只能是当前i+1的最优,因为同理第i+2个不会加上它)
全局最优可以理解为在所有的局部最优中寻找最大值。