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 

 

 

posted @ 2020-11-05 04:19  Sheanne  阅读(214)  评论(0)    收藏  举报