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
    }

    分治法

  • 相关阅读:
    C# 印刷文字识别-营业执照
    C# 印刷文字识别-身份证识别
    web视频点播平台
    web书籍信息管理系统
    web数字图书馆系统
    web文件监控系统
    web陶瓷商城管理系统
    web物品交易管理系统
    web校园单车管理平台
    web校园二手物品管理平台
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13511770.html
Copyright © 2011-2022 走看看