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

    你可能感兴趣的文章
    opencv29-轮廓周围绘制矩形框和圆形框
    查看>>
    OpenCV3 install tutorial for Mac
    查看>>
    opencv3-Mat对象
    查看>>
    opencv30-图像矩
    查看>>
    opencv32-基于距离变换和分水岭的图像分割
    查看>>
    opencv4-图像操作
    查看>>
    opencv5-图像混合
    查看>>
    opencv6-调整图像亮度和对比度
    查看>>
    opencv7-绘制形状和文字
    查看>>
    opencv8-图像模糊
    查看>>
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV_ cv2.imshow()
    查看>>
    opencv_core.dir/objects.a(vs_version.rc.obj)‘ is incompatible with i386:x86-64 output
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    opencv——最简单的视频读取
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | CoTracker3:用于卓越点跟踪的最新 AI 模型
    查看>>
    OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法
    查看>>