【每日一题Day355】LC1402 做菜顺序

编程入门 行业动态 更新时间:2024-10-09 20:27:35

【每日一题Day355】LC1402 做菜<a href=https://www.elefans.com/category/jswz/34/1771364.html style=顺序"/>

【每日一题Day355】LC1402 做菜顺序

做菜顺序【LC1402】

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

一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是 time[i]*satisfaction[i]

返回厨师在准备了一定数量的菜肴后可以获得的最大 like-time 系数 总和。

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

  • 思路

    • 贪心:
      • 为了获得最大的 like-time 系数 总和,应按照满意度升序做菜;
      • 满意度大的最后再做;
      • 满意度为负数的菜,可以选择做或者不做。
    • 排序后倒序遍历,增加一道菜like-time系数变化量为:satisfaction[i] +…+ satisfaction[n-1],如果大于0,那么可以使 like-time 系数 总和增加,那么选择做这道菜
  • 实现

    class Solution {public int maxSatisfaction(int[] satisfaction) {// 贪心:为了获得最大的 like-time 系数 总和,应按照满意度升序做菜;满意度大的最后再做;满意度为负数的菜,可以选择做或者不做// 大于等于0的菜必做,然后选择负数的菜作为第一道菜,看其能否使like-time系数// 排序后倒序遍历:每增加一道菜like-time系数变化量为:satisfaction[i] +....+ satisfaction[n-1]Arrays.sort(satisfaction);int n = satisfaction.length;if (satisfaction[n - 1] <= 0) return 0;int sum = 0, res = 0;for (int i = n - 1; i >= 0; i--){sum += satisfaction[i];if (sum > 0){res += sum;}else{break;}}return res;}
    }
    
    • 复杂度
      • 时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn)
      • 空间复杂度: O ( log ⁡ n ) O(\log n) O(logn)

更多推荐

【每日一题Day355】LC1402 做菜顺序

本文发布于:2023-12-04 04:22:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1659740.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:顺序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!