zoukankan      html  css  js  c++  java
  • 剑指30.连续子数组的最大和

    题目描述

    输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整/数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
    例如,输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。
     

    思路

    涉及的知识点是“动态规划”。通常可以用递归的方式分析动态规划问题,但最终都会基于循环进行编码。
     
    分析规律,从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能继续累加了,要从当前数字重新开始累加。在累加过程中,将每次累加和的最大值记录下来,遍历完成后,返回该数字。
     
    注意测试用例,要考虑到全为负数的情况!!
     

    代码实现

    public class Solution {
        public int FindGreatestSumOfSubArray(int[] array) {
            if (array == null || array.length <=0)
                return 0;
            int maxSum = array[0];
            int sum = array[0];
            for (int i = 1; i < array.length; i++) {
                if (sum >= 0)
                    sum += array[i];
                else
                    sum = array[i];
                // 更新累加过程中的最大值
                if (sum > maxSum)
                    maxSum = sum;
            }
            return maxSum;
        }
    }
     
  • 相关阅读:
    xml解析模块
    python面向对象基础
    python hashlib模块
    os和sys模块
    python反射
    正则表达式re模块
    踩的python列表及for循环一个坑儿
    python序列化模块json和pickle
    python时间模块-time和datetime
    64匹马、8赛道,至少多少轮比赛找出速度最快的4匹马?
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13510659.html
Copyright © 2011-2022 走看看