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

    剑指Offer:连续子数组的最大和

    题目描述

      输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个数组。求所拥有子数组的和的最大值。要求时间复杂度为O(n)

    题目分析

      我们可以用动态规划的思想来解决这个问题。以函数f(i)表示以第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)],其中0<=i<=n。我们可用如下递归公式求f(i):

      

      简单说明一下动态规划的思想:以第i-1个数结尾的最大和是多少,如果f(i-1)为负数,则与pData[i]相加,结果一定小于pData[i],所以直接取pData[i],否则加起来得到以第i个数字结尾的子数组的最大和

    Java题解

    public class Solution {
        public int FindGreatestSumOfSubArray(int[] array) {
            int[] dp = new int[array.length];
            dp[0] = array[0];
            int max = Integer.MIN_VALUE;
            for(int i=1;i<array.length;i++){
                if(array[i]+dp[i-1]<array[i])
                    dp[i] = array[i];
                else
                    dp[i] = array[i] + dp[i-1];
                if(dp[i]>max)
                    max = dp[i];
            }
            return max;
        }
    }
    

      

  • 相关阅读:
    Java知识回顾 (8) 集合
    Java知识回顾 (7) 继承、多态与接口、封装
    使用LEANGOO泳道
    使用列表
    LEANGOO用户设置
    创建LEANGOO项目
    为看板添加成员
    创建看板卡片
    创建LEANGOO看板
    创建LEANGOO账号
  • 原文地址:https://www.cnblogs.com/MrSaver/p/13070609.html
Copyright © 2011-2022 走看看