最大化两个整数列表之间的总和? (有限制)

时间:2014-06-18 19:07:58

标签: python algorithm

最近我作为面试问题给了我一个我无法解决的问题。

如果你有两个列表,并且想要最大化它们之间的总和,但是你一次只能输入一个条目,如果想要跳转到另一个列表,你必须跳过一个条目,你会怎么做它?

例如,您有两个城市,洛杉矶和纽约,您可以在这两个城市收钱。您可以前往其他城市,但要这样做,您必须跳过一个条目,您将如何最大化您的资金?假设你必须收钱的天数是< =纽约和洛杉矶的天数(两个清单)。

以下是两个示例列表:

洛杉矶:[300,400,800,900]

NY:[829,450,950,300,500,300]

你可以拿300,然后400.或者,你可以拿300,第二天旅行(跳过400和450)并在纽约拿950。

你能走哪条道路给你最大的收益?这就是我到目前为止所做的:

def maximize(n, la_income, ny_income):
 "Assume n <= len(sf_income), n <= len(ny_income)"
    ny_optimals=defaultdict()
    la_optimals=defaultdict()
    for e in range(0,len(sf_income),-1):
        if la_optimal[e+1]>ny_optimal[e+2]:
            la_optimal[e]=la_income[e]+la_optimal[e+1]
        else:
            la_optimal[e]=la_income[e]+ny_optimal[e+2]

我试图创建两个最佳收入列表,但这种方式似乎非常不合理。什么是解决这个问题的快速和pythonic方式?

1 个答案:

答案 0 :(得分:1)

如何进行递归搜索?

LA = [300, 400, 800, 900]

NY = [829, 450, 950, 300, 500, 300]

def search(now, nxt):
    if len(nxt) < 2:
        return now
    elif not now:
        return nxt[1:]
    stick = [now[0]] + search(now[1:], nxt[1:])
    switch = search(nxt[1:], now[1:])
    return max((stick, switch), key=sum)

print(search(LA, NY))

正如roippi在评论中指出的那样,memoization将提高性能。