zoukankan      html  css  js  c++  java
  • 最大子序和

    题目:

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

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

    解题思路:

    动态规划

    • 动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans
    • 如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字
    • 如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字
    • 每次比较 sum 和 ans 的大小,将最大值置为ans,遍历结束返回结果

    遍历一次,时间复杂度为 O(n),空间复杂度为O(1)

    func maxSubArray(nums []int) int {
        ans := nums[0]
        sum := 0
        for _, val := range nums {
            if sum > 0 {
                sum += val
            }else {
                sum = val
            }
            ans = max(ans, sum)
        }
        return ans
    }
    
    func max(x, y int) int {
        if x > y {
            return x
        }
        return y
    }
    

      地址:https://mp.weixin.qq.com/s/SHK1hcGXEFivxaHak834sA

  • 相关阅读:
    机器学习的数学基础
    Numpy + matplotlib + pandas 用法示例
    笔记:《ZeroMQ》
    Bash 常用快捷键
    Python网络爬虫
    Bash-Script 应用案例
    Bash-Script 语法详解
    ADB的使用
    ROS概述
    架构风格
  • 原文地址:https://www.cnblogs.com/smallleiit/p/13328057.html
Copyright © 2011-2022 走看看