举例当n=3时只枚举最后一个数就行,从第nums[n]开始枚举,只遍历一次数组,每次依次更新maxThree, maxTwo, maxN. 动态规划思想
nums = [randint(0, 20) for i in range(0, 8)]
print("nums: ",nums)
# 1. 找出nums里和最大的两个数
# 2. 找出和最大的三个数 O(N)
maxThree = sum(nums[:3])
maxTwo = max(sum(nums[:2]),sum(nums[1:3]))
maxN = max(nums[0],nums[1],nums[2]) #当前j之前的最大数 j=0,1,2时
for num in nums[3:]:
maxThree = max(maxThree,maxTwo+num) #更新maxThree, 如果num+历史最大两数和> 历史最大三数和
maxTwo = max(maxTwo, maxN+num)
maxN = max(maxN,num)
print(maxN,maxSum,maxThree)