最大子数组和
原创
©著作权归作者所有:来自51CTO博客作者aaronthon的原创作品,请联系作者获取转载授权,否则将追究法律责任
给你一个整数数组 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
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
答案:
func maxSubArray(nums []int) int {
len_nums := len(nums)
max_nums := nums[0]
if len_nums == 1 {
return max_nums
}
dict_nums := map[int]int{
0: max_nums,
}
for i := 1; i <= len_nums - 1; i++{
var i_max_nums int
if dict_nums[i-1] >= 0 {
i_max_nums = dict_nums[i-1] + nums[i]
} else {
i_max_nums = nums[i]
}
dict_nums[i] = i_max_nums
if i_max_nums > max_nums {
max_nums = i_max_nums
}
}
return max_nums
}
class Solution:
def maxSubArray(self, nums: [int]) -> int:
len_cd = len(nums)
max_sum = nums[0]
if len_cd == 1:
return max_sum
else:
sum_dict = {0: max_sum}
i = 1
while i <= len_cd - 1:
if sum_dict[i - 1] > 0:
i_max_sum = nums[i] + sum_dict[i - 1]
else:
i_max_sum = nums[i]
sum_dict[i] = i_max_sum
if i_max_sum > max_sum:
max_sum = i_max_sum
i += 1
return
结束