【力扣】1402:做菜顺序

题目描述

一个厨师收集了他 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%的用户

你可能感兴趣的:(力扣日记)