美文网首页
求连续子数组的最大和

求连续子数组的最大和

作者: android_hcf | 来源:发表于2020-05-08 22:19 被阅读0次

输入一个整数数组,求所有连续子数组的和的最大值,例如{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2},其和为18.
这个题目的一个解法,可以通过动态规划的方式实现。即对于给定的n长的数组,求其最大子数组和最大,即为求f(n)最大值。

  • 当n=0时,即数组长度只有1时,最大子数组长度必然就是该项本身,即array[n];
  • 当f(n-1)>0时,最大值必然是Math.max(array[n]+f(n-1), f(n-1)),其取决于array[n]是否>0;
  • 当f(n-1)<0时,最大值必然是array[n],因为f(n-1) + array[n] <= array[n]

实现算法如下:

private var maxSum = Int.MIN_VALUE

private fun getMaxSum(array: IntArray): Int {
    getMaxSum(array, array.size - 1)
    return maxSum
}

private fun getMaxSum(array: IntArray, index: Int): Int {
    if (index == 0 || getMaxSum(array, index - 1) <= 0) {
        return array[index]
    }
    val ms = array[index] + getMaxSum(array, index-1)
    maxSum = Math.max(maxSum, ms)
    return ms
}

测试用例如下:

object JavaTest {
    @JvmStatic
    fun main(args: Array<String>) {
        println(getMaxSum(intArrayOf(1, -2, 3, 10, -4, 7, 2, -5)))
    }
}

平时在练习过程中,随着练习的增多,代码也随之增大,删之可惜,本文所写纯粹是为记录点滴的需要,如有雷同纯属巧合。

相关文章

  • 求连续子数组的最大和

    leetcode 53题 解题思路:动态规划问题。给出数组array[ ],假定 f(i)代表array数组中以a...

  • 求连续子数组的最大和

    输入一个整数数组,求所有连续子数组的和的最大值,例如{1, -2, 3, 10, -4, 7, 2, -5},和最...

  • 算法训练2

    题目描述:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],...

  • 42:连续子数组的最大和

    题目42:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求...

  • 面试题42. 连续子数组的最大和

    连续子数组的最大和 题目描述 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求...

  • 每日一题之最大子序和

    题目53:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求...

  • 连续最大和

    一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3...

  • 动态规划

    1子序列的最大和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • 算法:求连续子数组的最大和

    一道基础算法,给定一个有正有负的数组,求出其中不限定个数的相邻相加最大和先上图解 用python写 这题本身蛮简单...

  • [剑指offer]刷题笔记

    连续子数组的最大和(常见✔) 最小的k个数 数组中出现次数超过一半的数字 数据流中的中位数(难♧) 连续子数组的最...

网友评论

      本文标题:求连续子数组的最大和

      本文链接:https://www.haomeiwen.com/subject/uzxcnhtx.html