剑指offer:连续子数组的最大和

标签: 剑指offer
2人阅读 评论(0) 收藏 举报
分类:

题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)

思路

1.动态规划,dp[i]=max(dp[i-1]+array[i],array[i]),到当前结点的连续子数组最大和等于(前一个结点的+当前结点数值)和当前结点数值最大的那个。
2.例如5、-6、3、-2、5、3、-1,最大子数组是3、-2、5、3。 找和的时候开始是5为正数加上,然后是-6,5-6=-1,小于0的数就没有必要在加上其他数找最大和了,可以舍去这项,所以preRes记录之前的和,加上当前项大于0就更新,说明对计算res可能有用,还用一个res记录真正的结果,如果preRes+当前结点的值大于res就更新res;

code

class Solution {
public:
    //1.
    int FindGreatestSumOfSubArray(vector<int> array) {
        int  *dp=new int[array.size()];
        int res=-1;
        for(int i=0;i<array.size();++i){
            if(i==0){
                res=dp[i]=array[i];
                continue;
            }
            dp[i]=(dp[i-1]+array[i])>array[i]?(dp[i-1]+array[i]):array[i];
            res=dp[i]>res?dp[i]:res;
        }
        return res;
    }
    //2.
    int FindGreatestSumOfSubArray(vector<int> array) {
        int preRes=0;
        int res=0x80000000;
        for(int i=0;i<array.size();++i){
            if(preRes<=0){
                preRes=array[i];
            }else{
                preRes=preRes+array[i];
            }
            if(preRes>res)
                res=preRes;
        }
        return res;
    }
};
查看评论

最实用的iOS开发课程

-
  • 1970年01月01日 08:00

剑指Offer—编程题31(连续子数组的最大和)

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例子说明: 例如输入的数组为{1, -2,...
  • u012129558
  • u012129558
  • 2016-06-12 15:47:25
  • 539

剑指offer之连续子数组的最大和(Python)

输入一个整形数组,有正数和负数,数组中的一个或连续多个整数组成一个子数组,O(n)时间求所有子数组的和的最大值...
  • u010636181
  • u010636181
  • 2017-11-02 11:17:50
  • 590

剑指offer----连续子数组的最大和----java实现

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数...
  • snow_7
  • snow_7
  • 2016-07-17 23:52:06
  • 810

剑指offer第三十题【连续子数组的最大和】c++实现

连续子数组的最大和 参与人数:1704时间限制:1秒空间限制:32768K通过比例:29.30%最佳记录:0 ms|8552K(来自  tony99) 题目描述 HZ偶尔会拿...
  • u011692312
  • u011692312
  • 2015-10-25 10:37:00
  • 737

动态规划典型例题--连续子数组的最大和

题目描述:给定一个数组arr,数组中的元素有整数也有负数,数组中的一个或者连续多个数组成一个子数组。 求所有子数组里面的最大和。例如现在有数组 {1 , -2 , 3 , 10 , -4 , 7...
  • qq_34528297
  • qq_34528297
  • 2017-05-24 19:27:09
  • 3395

面试题31:连续子数组最大的和

1)      第一种方法 #include using namespace std; //为了区分是函数返回0还是输入不合法返回0设置一个变量判断 bool inputInvalid=false...
  • lom9357bye
  • lom9357bye
  • 2015-06-02 12:00:34
  • 438

连续子数组的最大和 动态规划实现

/* *copyright@nciaebupt 转载请注明出处 *问题:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 *求所有子数组的和的最大值。要求时间负责度为...
  • wuwuwuwuwuwuwuwu
  • wuwuwuwuwuwuwuwu
  • 2013-01-08 16:51:42
  • 2694

【剑指offer】5.2时间效率——面试题31:连续子数组的最大和

//题目描述 // //HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。...
  • YYlxid
  • YYlxid
  • 2016-01-13 10:00:42
  • 327

[LeetCode] Maximum Subarray 求连续子数组的最大和

声明:原题目转载自LeetCode,解答部分为原创 Problem :     Find the contiguous subarray within an array (co...
  • xblog_
  • xblog_
  • 2017-06-05 21:52:41
  • 553
    个人资料
    持之以恒
    等级:
    访问量: 3739
    积分: 583
    排名: 8万+
    最新评论