数组中和n个数最大和,遍历一次O(N)解决

94 阅读1分钟

举例当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)