zoukankan      html  css  js  c++  java
  • 《剑指offer》连续子数组的最大和

    本题来自《剑指offer》 连续子数组的最大和

    题目:

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

    思路:

       采用动态规划的思想

        如果是第一次,那么该值便就是当前值。或者当前面的值小于0时候,也会保存当前的值

        如果当前的值大于0,并且非第一个数字时候,那么就累加。

        累计求和,每次都将最大的值保存起来,最后返回最大的值即可。

    C++ Code:

    class Solution {
    public:
        int FindGreatestSumOfSubArray(vector<int> array) {
            if (array.size()<=0){                    //边界条件,当原始数组不存在时候,直接返回0
                return 0;
            }
            int sum = 0;                             //中间值累计求和
            int greatest = 0x80000000;               //负无穷
            int length = array.size();               //原书数组的长度
            for (int i=0;i<length;i++){
                if (sum<=0){                         //如果累计求和小于0,说明前面的累加都小于0,便将当前的值重新赋予
                    sum = array[i];
                }else{                               //否则累加当前的值
                    sum += array[i];
                }
                if (sum > greatest){                 //如果累加的中间值大于负无穷
                    greatest = sum;                  //每次都将最大的值保存起来
                }
            }
            return greatest;                         //最后返回最大的值
        }
    };

    Python Code:

    总结:

  • 相关阅读:
    sql测试
    sql时间和日期函数
    递归算法
    冒泡排序
    Ajax
    省市区下拉框三级联动
    Repeater用法
    WIndows form Linq多表联合
    C# 递归算羊
    C# 定义一个学生的结构体,输入学生信息,学号,姓名,身高,按身高排序输出
  • 原文地址:https://www.cnblogs.com/missidiot/p/10783661.html
Copyright © 2011-2022 走看看