lxw124 / -Test

算法
1 stars 0 forks source link

leetcode1402-做菜顺序 #15

Open lxw124 opened 4 years ago

lxw124 commented 4 years ago

一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。

一道菜的 「喜爱时间」系数定义为烹饪这道菜以及之前每道菜所花费的时间乘以这道菜的满意程度,也就是 time[i]*satisfaction[i] 。

请你返回做完所有菜 「喜爱时间」总和的最大值为多少。

你可以按 任意 顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。

示例 1:

输入:satisfaction = [-1,-8,0,5,-9] 输出:14 解释:去掉第二道和最后一道菜,最大的喜爱时间系数和为 (-11 + 02 + 5*3 = 14) 。每道菜都需要花费 1 单位时间完成。 示例 2:

输入:satisfaction = [4,3,2] 输出:20 解释:按照原来顺序相反的时间做菜 (21 + 32 + 4*3 = 20) 示例 3:

输入:satisfaction = [-1,-4,-5] 输出:0 解释:大家都不喜欢这些菜,所以不做任何菜可以获得最大的喜爱时间系数。

lxw124 commented 4 years ago

var maxSatisfaction = function(satisfaction) {
   if (satisfaction.every(x => x < 0)) {
         return 0;
     }//如果都为负数就直接返回0
  //排序
   const s=satisfaction.sort((x,y)=>{return x-y})
   let sum = 0;
    let prevMax = -Infinity;

    while (s.length > 0) {
        arr = s.map((val, index) => val * (index + 1));
        sum = arr.reduce((prev, next) => (prev + next));
        if (sum > prevMax) {
            prevMax = sum;
        } else {
            break;
        }
        s.shift();
    }

    return prevMax;

};