zoukankan      html  css  js  c++  java
  • leetcode53:最大子序和 动规+分治

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

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4]
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
    进阶:

    如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

    动态规划

    ========================================Python=======================================

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            dp = [0 for _ in range(len(nums))]
            dp[0] = nums[0]
            for i in range(1, len(nums)):
                dp[i] = max(nums[i], dp[i-1] + nums[i])
            return max(dp)

    =========================================Go=========================================

    func maxSubArray(nums []int) int {
        if len(nums) < 1{
            return 0
        }
        dp := make([]int, len(nums))
        dp[0] = nums[0]
        for i := 1; i < len(nums); i++ {
            if dp[i-1] < 0 {
                dp[i] = nums[i]
            } else {
                dp[i] = dp[i-1] + nums[i]
            }
        }
        result := -1 << 31
        for _, k := range dp {
            result = max(result, k)
        }
        return result 
    }
    
    func max(a, b int) int {
        if a > b {
            return a
        }
        return b
    }

    分治法

  • 相关阅读:
    文件与流之动手动脑
    四则运算1.1版
    2018年11月16日编程体会
    JAVA(1)之关于对象数组作形参名的方法的使用
    re模块 时间模块
    日志模块
    软件开发目录规范
    模块和包
    内置函数
    匿名函数
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13511770.html
Copyright © 2011-2022 走看看