LeetCode 1402 - Reducing Dishes (Hard)
A chef has collected data on the satisfaction level of his n dishes. Chef can cook any dish in 1 unit of time.
Like-time coefficient of a dish is defined as the time taken to cook that dish including previous dishes multiplied by its satisfaction level i.e. time[i]*satisfaction[i]
Return the maximum sum of Like-time coefficient that the chef can obtain after dishes preparation.
Dishes can be prepared in any order and the chef can discard some dishes to get this maximum value.
Example 1:
Input: satisfaction = [-1,-8,0,5,-9] Output: 14 Explanation: After Removing the second and last dish, the maximum total Like-time coefficient will be equal to (-1*1 + 0*2 + 5*3 = 14). Each dish is prepared in one unit of time.
Example 2:
Input: satisfaction = [4,3,2] Output: 20 Explanation: Dishes can be prepared in any order, (2*1 + 3*2 + 4*3 = 20)
Example 3:
Input: satisfaction = [-1,-4,-5] Output: 0 Explanation: People don't like the dishes. No dish is prepared.
Example 4:
Input: satisfaction = [-2,5,-1,0,3,-3] Output: 35
方法:greedy (把最满意的放到最后cook)
思路:
1. sort array。
2. 逆序遍历array。维护两个变量,一个是total,一个是res. total += satisfaction[i], res += total. 遍历会到total<0结束。
time complexity: O(nlogn), space complexity: O(1)
class Solution: def maxSatisfaction(self, satisfaction: List[int]) -> int: satisfaction.sort() n = len(satisfaction) res = 0 total = 0 i = n -1 while i >= 0 and satisfaction[i] > -total: total += satisfaction[i] res += total i -= 1 return res
浙公网安备 33010602011771号