• 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. }

  • 相关阅读:
    【日常运维】CMDB轻松管理千百台服务器---jumpserver堡垒机
    NVMe SSD 学习总结:02 浅析SSD技术基础(掉电保护、U.2 双端口、多命名空间)
    一文带你清晰弄明白线程池的原理
    Python中的集合
    TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书
    防止雪崩问题
    【 医学影像| 数据预处理】
    MySQL:互联网公司常用分库分表方案汇总
    信奥中的数学:对数(2022.10.29)
    TNF6TOA TNF5TOA 全新板卡8路任意速率业务支路处理板
  • 原文地址:https://blog.csdn.net/yu_duan_hun/article/details/125880704