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

  • 相关阅读:
    java计算机毕业设计VUE商场库存管理系统MyBatis+系统+LW文档+源码+调试部署
    年耗资百万数据库升级记录
    Creaform形创HandySCAN MAX三维扫描仪大型零部件尺寸测量设备
    2023 Google 开发者大会 – AI 领域的技术更新
    网络安全(黑客)自学
    为什么那么多人说大数据只是写SQL?
    Vue的计算属性/侦听器/组件用法详解
    小程序需要做等保测评吗?
    基于PSD-ML算法的语音增强算法matlab仿真
    Shell脚本-位置参数(命令行参数)
  • 原文地址:https://blog.csdn.net/yu_duan_hun/article/details/125880704