王老头

导航

迅雷 AI人工智能试题二

求数组中不相邻元素的最大和。

大概意思是:首先输入一个数组,从左往右开始,取出不相邻的数字,使得最后求得的和最大。

这是一个动态规划的问题。

解题思路
遍历array 中的所有元素,设置两个变量: 
aa: 不包含前一个元素的最大和 
bb: 包含前一个元素的最大和

更新当前元素的 aa 和 bb: 
不包含当前元素的最大和 aa = max(bb’, aa’) 
包含当前元素的最大和 bb = aa’+current (元素不能相邻)

如输入为1,2,3,1。

输出为4。

def getMax(a,b):
    if(a>=b):
        return a
    else:
        return b

def getMaxsum(arr,num):
    if(num<=0):
        return 0
    elif(num==1):
        return arr[0]
    aa = 0
    bb = arr[0]
    for i in range(1,num):
        temp = getMax(aa,bb)
        bb = aa + arr[i]
        aa = temp
    return getMax(bb,aa)

while True:
    try:
        arr = map(int,raw_input().split(','))
        # print(arr)
        result = getMaxsum(arr,len(arr))
        print(result)
    except:
        break

 

posted on 2018-09-20 10:43  王老头  阅读(153)  评论(0)    收藏  举报