1. from typing import List
  2. def MaxSubSum(nums: List[int]) -> int:
  3. # dp[i]: 以i结尾的最大字串和
  4. dp = [None for i in range(len(nums) + 1)]
  5. dp[0] = float('-INF')
  6. for i in range(1, len(nums) + 1):
  7. # 可能出现负数的情况
  8. dp[i] = max(nums[i - 1], dp[i - 1] + nums[i - 1])
  9. return max(dp)
  10. def MaxSubSum1(nums: List[int]) -> int:
  11. # dp[i], [0, i] 最大字串和
  12. # dp[i] = max(dp[i-1], max_end_i))
  13. # 以i为结尾的最长字串和
  14. max_end_i = []
  15. dp = []
  16. for i in range(len(nums)):
  17. dp[i] = max(dp[i], max_end_i[i])
  18. # nums = [1, 1, -3, 6, 7, -1, 3, 4, -3, -4, -8]
  19. nums = [-3, 1, 3, -1, 2, -4, 2]
  20. print(MaxSubSum(nums))

总结

  • dp 定义问题