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

本文共 1223 字,大约阅读时间需要 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 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置清单(一篇够用)
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    nginx+php的搭建
    查看>>
    nginx+tomcat+memcached
    查看>>
    nginx+Tomcat性能监控
    查看>>