最大连续子数组和 动态规划_(剑指offer)连续子数组的最大和

题目描述:

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?

例如:

8d2fa386511226d08953e2c65ff4f144.png

分析:

这题考察动态规划,只需要O(n)时间复杂度即可。其推导公式如下:f(i) = array[i]   i = 0f(i) = f(i - 1) + array[i]   i > 0i的取值范围:0<= i < n1、判断当前的数值与之前遍历的累加最大值进行比较,并取两者最大2、根据1得到的结果与之前记录的最大值进行比较,取两者最大值

代码:

public class Solution {    public int FindGreatestSumOfSubArray(int[] array) {        int length = array.length;        // 假设最大值是第一个        int max = array[0];        for (int i = 0, sum = 0; i < length; ++i) {            // 取当前值与累加的值两者最大值            sum = Math.max(array[i], array[i] + sum);            // 更新最大值            max = Math.max(max, sum);        }        return max;    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值