栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

[LeetCode]easy - Maximum Subarray - python

Python 更新时间:发布时间: 百科书网 趣学号

题目要求:

从一个数组中找出一个子串使其和最大,是最大子串和问题。

Problem Description:

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

A subarray is a contiguous part of an array.

题目链接

思路一:

暴力法,把每一个subarray的和都算一遍,记录其中出现的最大值。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_sum = nums[0]
        for i in range(0,len(nums)):
            current_sum = nums[i]
            if i != len(nums) - 1:
                for j  in range(i + 1, len(nums)):
                    if current_sum > max_sum:
                        max_sum = current_sum
                    current_sum = current_sum + nums[j]
            else:
                if nums[-1] > max_sum:
                    max_sum = nums[-1]
            if current_sum > max_sum:
                        max_sum = current_sum
        return max_sum

结果如下:

因为时间复杂度太高于是超时了(或者我写出bug了)

思路二:

给定的数组如果表示为 array[1…n],假定array[i…j]是最大和的子串。对于数组中的每一个元素,它分为以下两种情况:加入之前的数组加和之中,或者自己成为一个子数组的开头。

动态规划状态转移方程:current_sum = max(nums[i], current_sum + nums[i])

然后我们一直记录最大的值即可。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        elif len(nums) == 1:
            return nums[0]
        else:
            current_sum = max_sum = nums[0]
            for i in range(1, len(nums)):
                current_sum = max(nums[i], current_sum + nums[i])
                max_sum = max(max_sum, current_sum)
            return max_sum

结果如下:

 

动态规划:

动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。

简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。

动态规划最核心的思想,就在于拆分子问题,记住过往,减少重复计算。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号