博客
关于我
牛客题霸 [连续子数组的最大和] C++题解/答案
阅读量:138 次
发布时间:2019-02-27

本文共 1239 字,大约阅读时间需要 4 分钟。

最大连续子序列和问题是一个经典的算法题目,通常用Kadane算法解决。Kadane算法的基本思路是从左到右遍历数组,对于每个元素,判断其是否比当前累加值大。如果是,则更新当前累加值;否则,重置当前累加值为该元素的值。同时,每次更新最大累加值,记录最大的那个。

以下是详细的步骤解释:

  • 初始化变量:首先设置最大累加值maxx为数组的第一个元素,当前累加值current也为第一个元素。

  • 遍历数组:从第二个元素开始遍历数组。

  • 更新当前累加值:对于每个元素,判断其是否大于当前累加值加上该元素。若是,则将当前累加值设置为该元素的值;否则,将当前累加值更新为前一个累加值加上当前元素的值。

  • 更新最大累加值:在每次遍历后,比较当前累加值与maxx,若当前累加值更大,则更新maxx

  • 返回结果:遍历结束后,返回maxx,即为最大连续子序列的和。

  • 这种方法的时间复杂度是O(n),空间复杂度是O(1),非常高效。

    题目描述

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

    题解

    这个问题可以通过Kadane算法来解决。Kadane算法的基本思想是从左到右遍历数组,对于每个元素,判断它是否比当前累加值大。如果是,则更新当前累加值;否则,重置当前累加值为该元素的值。同时,每次遍历都要比较当前累加值和全局最大值,记录最大的那个。

    代码

    class Solution {
    public:
    int FindGreatestSumOfSubArray(vector
    array) {
    if (array.empty()) {
    return 0;
    }
    int maxx = array[0];
    int current = array[0];
    for (int i = 1; i < array.size(); ++i) {
    current = array[i] > (current + array[i]) ? array[i] : (current + array[i]);
    if (current > maxx) {
    maxx = current;
    }
    }
    return maxx;
    }
    }

    转载地址:http://quzb.baihongyu.com/

    你可能感兴趣的文章
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>