最大子数组问题(延伸最大子矩阵问题)

题目如标题,一个数组中求子数组和的最大值。

分析:
(1)数组全为非负数,则解为数组所有值的和。
(2)数组全为负数,则解为数组中最大的成员的值。
(3)数组含有负数和非负数,最普遍的情况。

解法:
1.技巧型,通过假设。假如我们要找的子数组即是和最大的,也是长度最长的。
在这里插入图片描述

那么这个数组应该满足以下性质:
(1)i至k(k<j)的任何一个数组,其和都应该不小于0。因为若小于零那就应该从k+1开始到j才能满足最大子数组的要求。
(2)以i-1为尾部的任一个数组,其和都应该小于0,同理。
所以我们运用一个cur来记录当前累加的情况,max来记录最大值。当cur小于0时,我们把cur重新设定为0。
在这里插入图片描述

2.动态规划,数组成员有两种选择,要么加入前面的子数组队列,要么自己另起炉灶。
转移方程 dp[i] = max(num[i],dp[i-1]+num[i]);
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值