leetcode代码记录(最大子数组和

简介: leetcode代码记录(最大子数组和

1. 题目:

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

子数组

是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

输出:6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]

输出:1

示例 3:

输入:nums = [5,4,-1,7,8]

输出:23

2. 我的代码:

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # dp数组(表示以这个元素为结尾的连续数组)
        dp = [0] * len(nums)
        # 初始化
        dp[0] = nums[0]
        # 结果记录
        result = dp[0]
        # 递推
        for i in range(1, len(nums)):
            dp[i] = max(nums[i], nums[i] + dp[i - 1])
            if dp[i] > result:
                result = dp[i]

        return result

这里使用动态规划

首先确定dp数组下标的含义:表示以这个元素为结尾的连续数组;dp数组的元素值的含义:表示以这个元素为结尾的连续数组的最大和


然后确定递推公式:由于前面的相加可能会得到负数,所以到次下标时,应当考虑是否要加前面的元素,因此递推公式为:dp[i] = max(nums[i], nums[i] + dp[i - 1])或者判断dp[i - 1]是否是负数来赋值。

同时记录一下每次的最大和,将result的最大记录刷新。

目录
相关文章
|
5天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
5天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
5天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
5天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
5天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
10 2
|
5天前
leetcode代码记录(回文数
leetcode代码记录(回文数
13 1
|
5天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
5天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
5天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
5天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0