XuLaLa.Tech

首页客户端下载Windows 使用V2Ray 教程SSR 教程Clash 教程

Python每日一题|最大子数组和

2025.04.14
本文目录

隐藏

题目描述函数定义输入输出示例提示完整代码

题目描述

请编写一个 Python 函数 max_subarray(nums),接受一个整数列表 nums,返回该列表中和最大的连续子数组的和。

函数定义

def max_subarray(nums: List[int]) -> int:

"""

寻找最大子数组和

Args:

nums: 整数列表

Returns:

最大子数组和

"""

pass

输入

输入一个整数列表 nums,其中 $1 \leq |nums| \leq 10^5$。

输出

返回一个整数,为输入列表中和最大的连续子数组的和。

示例

>>> max_subarray([-2,1,-3,4,-1,2,1,-5,4])

6

>>> max_subarray([1])

1

>>> max_subarray([5, 4, -1, 7, 8])

23

提示

  • 可以使用动态规划算法来解决本题,时间复杂度为 $O(n)$。
  • 动态规划的状态转移方程为:$f(i) = max(nums[i], f(i-1) + nums[i])$,其中 $f(i)$ 表示以第 $i$ 个元素结尾的子数组的和最大值。
  • 需要注意 Python 中列表是可变对象的特性,需要避免在循环中修改列表导致错误的情况。

完整代码

from typing import List

def max_subarray(nums: List[int]) -> int:

"""

寻找最大子数组和

Args:

nums: 整数列表

Returns:

最大子数组和

"""

if not nums:

return 0

max_sum = nums[0]

cur_sum = nums[0]

for i in range(1, len(nums)):

cur_sum = max(nums[i], cur_sum + nums[i])

max_sum = max(max_sum, cur_sum)

return max_sum

print(max_subarray([1]))

© 2010-2022 XuLaLa 保留所有权利 本站由 WordPress 强力驱动
请求次数:69 次,加载用时:0.665 秒,内存占用:32.19 MB