經(jīng)營摩天輪的最大利潤
-
先看執(zhí)行效率,我覺得有假钠导。
思路見注釋闸餐。
class Solution:
def minOperationsMaxProfit(self, customers: List[int], boardingCost: int, runningCost: int) -> int:
"""
思路:
# 稍微簡化一下題意储藐,就是如何把 c = [8, 3]轉(zhuǎn)化為 c = [4, 4, 3]
# 思路就是每次取4, 如果大于4棉胀, 那么就把多余的部分加到下一個(gè)頭上矢炼。
# 一直到最后,看看最后一個(gè)值是否還是大于4拌倍,然后不斷削減。
# c = [4, 3+4] = [4, 4, 3]
# 而我當(dāng)時(shí)的想法是噪径,用一個(gè)remain來保存大于4的部分柱恤,結(jié)果路走窄了。找爱。梗顺。
"""
max_profit = float("-inf")
running_times = 1
profit = 0
dic = {} # dic = {running_times: profit}
n = len(customers)
i = 0
profit = 0
while i < n-1: # 無法取到最后一位。
if customers[i] > 4:
customers[i+1] += customers[i] - 4
profit += 4 * boardingCost - runningCost
else:
profit += customers[i]*boardingCost - runningCost
dic[running_times] = profit
i += 1
running_times += 1
while customers[i]:
if customers[i] > 4:
customers[i] -= 4
profit += 4 * boardingCost - runningCost
dic[running_times] = profit
else:
profit += customers[i]*boardingCost - runningCost
dic[running_times] = profit
break
running_times += 1
# print(dic) # {1: 14, 2: 28, 3: 37}
ret = sorted(dic.items(), key=lambda x: [x[1], -x[0]]).pop()
if ret[1] > 0:
return ret[0]
else:
return -1
"""
134 / 136 個(gè)通過測試用例
[10,10,1,0,0]
4
4
這個(gè)運(yùn)行的實(shí)際結(jié)果是 {1: 12, 2: 24, 3: 36, 4: 48, 5: 60, 6: 60}
也就是說運(yùn)行的結(jié)果是正確的车摄,但是最終排序取值的時(shí)候出錯了寺谤。
解決辦法:
1. 改為動態(tài)賦值,但是我覺得對整體思路而言顯得有點(diǎn)雜亂吮播。
2. 修改排序規(guī)則变屁。key=lambda x: [x[1], -x[0]]
"""