• 1235. 规划兼职工作 动态规划


    1235. 规划兼职工作

    你打算利用空闲时间来做兼职工作赚些零花钱。

    这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]

    给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。

    注意,时间上出现重叠的 2 份工作不能同时进行。

    如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。

    示例 1:

    输入:startTime = [1,2,3,3], endTime = [3,4,5,6], profit = [50,10,40,70]
    输出:120
    解释:
    我们选出第 1 份和第 4 份工作, 
    时间范围是 [1-3]+[3-6],共获得报酬 120 = 50 + 70。
    

    示例 2:

    输入:startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60]
    输出:150
    解释:
    我们选择第 1,4,5 份工作。 
    共获得报酬 150 = 20 + 70 + 60。
    

    示例 3:

    输入:startTime = [1,1,1], endTime = [2,3,4], profit = [5,6,4]
    输出:6
    

    提示:

    • 1 <= startTime.length == endTime.length == profit.length <= 5 * 10^4
    • 1 <= startTime[i] < endTime[i] <= 10^9
    • 1 <= profit[i] <= 10^4

     

    做题结果

    失败,没看答案的时候写不出,看了还是写不出, 多琢磨了一个多小时,终于写出来。

    方法:动态规划+排序

    1. 按结束时间排序升序,之后,我们主要关心结束时间

    2. 获取当前开始时间前面结束时间对应的索引,如果非空则进行累加,与前面结束的时间比大小,取较大值【有可能存在先结束更优的情况】

    3. 将当前的结束时间放入有序集合,以供后续元素查询

    4. 返回动态规划 dp 的最后一个元素

    1. class Solution {
    2. public int jobScheduling(int[] startTime, int[] endTime, int[] profit) {
    3. int n = startTime.length;
    4. int[][] items = new int[n][3];
    5. for(int i =0 ;i < n; i++){
    6. items[i]=new int[]{startTime[i],endTime[i],profit[i]};
    7. }
    8. Arrays.sort(items,(a,b)->a[1]-b[1]);
    9. TreeMap endTimes = new TreeMap<>();
    10. int[] dp = new int[n];
    11. for(int i= 0; i < n; i++){
    12. int preMax = endTimes.floorKey(items[i][0])!=null?dp[endTimes.get(endTimes.floorKey(items[i][0]))]:0;
    13. dp[i] = Math.max(i==0?0:dp[i-1],preMax+items[i][2]);
    14. endTimes.put(items[i][1],i);
    15. }
    16. return dp[n-1];
    17. }
    18. }

  • 相关阅读:
    hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行
    【System Verilog and UVM基础入门4】程序和接口
    C语言入门课程学习笔记3
    基于STM32设计的云端健康管理系统(采用阿里云物联网平台)
    【C语言】浮点数在内存中的存储
    使用Spring+Postman实现数据交互
    HBuilder X配置代码块快速创建代码 VSCode配置代码块保姆级教程
    【算法-动态规划】零钱兑换问题-力扣 322
    【Vue】vue2上传Excel表格到后台 实战教程(接上一篇下载Excel模板表格到本地)
    LabVIEW使用Deskto pExecution Trace工具包
  • 原文地址:https://blog.csdn.net/yu_duan_hun/article/details/125880704