力扣第1402题:做菜顺序(贪心算法)

一、题目内容

     力扣第1402题:做菜顺序(贪心算法)_第1张图片

二、题目分析

        这个题目大概有这样两种极端情况:一种是全为非负数,这时候做所有的菜都可以让我的喜爱时间总和变大。比如有个数组[4,2,6,3,1],都是非负数,所以每个菜都要坐,那怎么获得最大喜爱时间呢?因为最大喜爱时间等于前缀时间和乘以这道菜的满意程度,而时间和都是一样的,所以我们要把满意程度最大的菜放在最后做才可以获得最大喜爱时间,即按照[6,4,3,2,1]来做最好。当全是负数的时候,自然是一道也不做最好啦。

        所以在写这道题的时候,我们首先应该把它按照从小到大排序,然后从最后一个数开始判断。具体判断方法是 先判断前缀和加当前的菜品的满意度是否大于0,大于0就将前缀和加上当前菜品满意度,再用最终结果加上前缀和,循环一次即可。

三、代码

class Solution {
    public int maxSatisfaction(int[] satisfaction) {
        Arrays.sort(satisfaction);
        int rnt=0;
        int presum=0;
        for(int i=satisfaction.length-1;i>=0;i--)
        {
            int temp=satisfaction[i];
            if(presum+temp>0){
                presum+=temp;
                rnt+=presum;
            }
            else
                break;
     
       }
        return rnt;
    }

   
}

力扣第1402题:做菜顺序(贪心算法)_第2张图片

四、结尾

        心情不好,解释不仔细。 

你可能感兴趣的:(贪心算法,贪心算法,leetcode,算法)