博客
关于我
牛客题霸 [连续子数组的最大和] 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/

    你可能感兴趣的文章
    python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
    查看>>
    Python 字符串的几种拼装方式
    查看>>
    python 存入数据库bigint_python基础_MySQL的bigint类型
    查看>>
    python 学习 面向对象编程
    查看>>
    Python 学习小结
    查看>>
    Python 学习日记第三篇 -- 字典
    查看>>
    Python 学习笔记(一)Data type
    查看>>
    python 安装 easy_install 和 pip 流程
    查看>>
    python 安装echarts
    查看>>
    python 安装opencv及问题解决
    查看>>
    Python 安装程序:“写入文件 C:\Python27\pythonw.exe 时出错“
    查看>>
    Python 安装避坑指南:从入门到进阶
    查看>>
    Python 安装配置详解
    查看>>
    python 实现儿童算术游戏
    查看>>
    python 实现字符串转整型
    查看>>
    Python 实现定时任务的八种方案!
    查看>>
    python 实现将RGBA 转换为RGB
    查看>>
    python字符串与url编码的转换
    查看>>
    Python 实现自动化测试 dubbo 协议接口
    查看>>
    python编程基础之十六
    查看>>