題目描述
一個廚師收集了他 n 道菜的滿意程度 satisfaction ,這個廚師做出每道菜的時間都是 1 單位時間。
一道菜的 「喜愛時間」係數定義爲烹飪這道菜以及之前每道菜所花費的時間乘以這道菜的滿意程度,也就是 time[i]*satisfaction[i] 。
請你返回做完所有菜 「喜愛時間」總和的最大值爲多少。
你可以按 任意 順序安排做菜的順序,你也可以選擇放棄做某些菜來獲得更大的總和。
算法思路
因爲可以任意排序,還可以放棄某些菜,那麼顯然做菜的順序應該從小到大,而如下算法,每次增加一個新菜,那麼舊菜的喜愛時間總和就會翻倍,那麼增加一個新菜而增加的時間總和就是n+=i
,當n<=0時,再增加新菜,喜愛時間不會再增加,此時有最大時間總和。
class Solution:
def maxSatisfaction(self, satisfaction: List[int]) -> int:
satisfaction.sort(reverse=True)
n,res=0,0
for i in satisfaction:
n+=i
if n<=0:break
res+=n
return res
執行用時 :48 ms, 在所有 Python3 提交中擊敗了89.76%的用戶
內存消耗 :13.5 MB, 在所有 Python3 提交中擊敗了100.00%的用戶