当前位置:实例文章 » 其他实例» [文章]【LeetCode】53.最大子数组和

【LeetCode】53.最大子数组和

发布人:shili8 发布时间:2025-02-22 08:08 阅读次数:0

**最大子数组和**
================**问题描述**
------------给定一个整数数组 `nums`,找到其中最大的连续子数组的和。

**示例1:**

* 输入:`nums = [-2,1,-3,4,-1,2,1,-5,4]`
* 输出:`6`

**示例2:**

* 输入:`nums = [1]`
* 输出:`1`

**示例3:**

* 输入:`nums = [0]`
* 输出:`0`

**解决方案**
------------### 动态规划法我们可以使用动态规划来解决这个问题。动态规划是一种通过分解大问题为小问题的方法,求出每个子问题的最优解,然后组合这些解以得出原问题的最优解。

#### 思路1. 初始化一个数组 `dp`,其中 `dp[i]` 表示从第 `i` 个元素开始的最大连续子数组和。
2. 遍历数组 `nums`,对于每个元素 `nums[i]`,计算其与前面的最大连续子数组和的最大值,并更新 `dp[i]`。

####代码

class Solution:
 def maxSubArray(self, nums: List[int]) -> int:
 # 初始化动态规划数组 dp = [0] * len(nums)
 # 初始化最大子数组和 max_sum = float('-inf')
 # 遍历数组,计算每个元素的最大连续子数组和 for i in range(len(nums)):
 if i ==0:
 dp[i] = nums[i]
 else:
 dp[i] = max(dp[i-1]+nums[i], nums[i])
 # 更新最大子数组和 max_sum = max(max_sum, dp[i])
 return max_sum


### Kadane算法Kadane算法是一种线性时间复杂度的算法,用于求解最大子数组和问题。

#### 思路1. 初始化一个变量 `max_sum`,用来存储当前最大子数组和。
2. 遍历数组 `nums`,对于每个元素 `nums[i]`,计算其与前面的最大连续子数组和的最大值,并更新 `max_sum`。

####代码
class Solution:
 def maxSubArray(self, nums: List[int]) -> int:
 # 初始化最大子数组和 max_sum = float('-inf')
 # 遍历数组,计算每个元素的最大连续子数组和 for i in range(len(nums)):
 if i ==0:
 current_sum = nums[i]
 else:
 current_sum = max(current_sum+nums[i], nums[i])
 # 更新最大子数组和 max_sum = max(max_sum, current_sum)
 return max_sum


### 分治法分治法是一种递归的算法,用于求解最大子数组和问题。

#### 思路1. 初始化一个变量 `max_sum`,用来存储当前最大子数组和。
2. 将数组 `nums` 分成两半,分别计算左半部分和右半部分的最大连续子数组和。
3. 更新 `max_sum` 为左右两半部分中最大的值。

####代码
class Solution:
 def maxSubArray(self, nums: List[int]) -> int:
 # 初始化最大子数组和 max_sum = float('-inf')
 # 递归计算左半部分和右半部分的最大连续子数组和 def recursive_max_subarray(left, right):
 nonlocal max_sum if left == right:
 return nums[left]
 mid = (left + right) //2 left_max = recursive_max_subarray(left, mid)
 right_max = recursive_max_subarray(mid+1, right)
 # 更新最大子数组和 max_sum = max(max_sum, left_max, right_max)
 return max(left_max, right_max)
 recursive_max_subarray(0, len(nums)-1)
 return max_sum


### 总结以上是对最大子数组和问题的解决方案总结。动态规划法、Kadane算法和分治法都是有效的方法,分别具有不同的时间复杂度和空间复杂度。

其他信息

其他资源

Top