LeetCode每日一题——1235. 规划兼职工作
LeetCode每日一题系列
题目:1235. 规划兼职工作
难度:困难
文章目录
- LeetCode每日一题系列
- 题目
- 示例
- 思路
- 题解
题目
你打算利用空闲时间来做兼职工作赚些零花钱。
这里有 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
思路
动态规划+二分搜索
- dp数组定义为到某个截止时间所能获得的最大收入,初始值为[[0,0]]
- 这里先将开始时间、结束时间、和对应的收入合成一个数组,并按照结束时间由小到大排序
- 遍历排序后的数组,寻找每个开始时间之前的最后一个结束时间dp[i][0],判断该元素的价格加上上一个结束时间的dp[i]][1]是否大于dp[-1][1],如果大于则在dp上添加本元素的结束时间以及最大收入和,如果小于则跳过。
题解
class Solution:def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:# 组合并排序jobs = sorted(zip(startTime, endTime, profit), key=lambda x: x[1])# dp数组dp = [[0, 0]]# 遍历for s, e, p in jobs:# 二分查找i = bisect.bisect(dp, [s + 1]) - 1# 判断是否需要更新结束时间和最大收入if dp[i][1] + p > dp[-1][1]:dp.append([e, dp[i][1] + p])return dp[-1][1]
LeetCode每日一题——1235. 规划兼职工作相关推荐
- LeetCode 1235. 规划兼职工作(动态规划+二分查找)
文章目录 1. 题目 2. 解题 1. 题目 你打算利用空闲时间来做兼职工作赚些零花钱. 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 ...
- 【1235. 规划兼职工作】
来源:力扣(LeetCode) 链接: 你打算利用空闲时间来做兼职工作赚些零花钱. 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 ...
- LeetCode每日一题: 1723. 完成所有工作的最短时间
1723. 完成所有工作的最短时间 题目 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给工人,且每项工作 ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- 动态规划-规划兼职工作
动态规划-规划兼职工作 一.问题描述 你打算利用空闲时间来做兼职工作赚些零花钱.这里有 n 份兼职工作,每份工作预计从 startTime 开始到 endTime 结束,报酬为 profit.给你一份 ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
最新文章
- 庆祝博客积分成功上四位数!
- php 枚举cookie内容,php如何修改cookie内容?
- 从最小二乘到岭回归(Ridge Regression)的深刻理解
- swap(a,b)值交换的4种方法
- 红帽企业版linux 7.3,红帽推企业Linux 7.3 新功能特性一览
- java sql2008的增删改查_SQL server数据库增删改查练习
- MySQL分区表概述
- 米斯特白帽培训讲义 漏洞篇 SQL 注入
- Want To Say Something
- labview小波包分解
- 六大设计原则(SOLID)备忘
- wxpython使用多进程_最简单方法远程调试Python多进程子程序
- 【水】【SCOI】 精简题解
- 如何制作微信春节头像,分享手机、电脑端制作头像的方法
- (转)The Neural Network Zoo
- java xlsx转html
- Spring系列之依赖注入的三种方式
- c语言设计函数删除大写字母,C语言第七周作业
- 【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】
- ubuntu18.04 64位+GTX1070max-q安装CUDA10.0+CUDNN7.4.2+安装Anaconda3.5.2+PyTorch1.4+torchvision0.5
热门文章
- 艾司博讯:拼多多揽件信息超时处罚是什么
- 电机的堵转检测及处理
- vue中使用echart地图
- 亚马逊店铺如何计算?
- PPT怎么转化成PDF?这两种方法教你快速解决!
- fatal error: FL/Fl_Gl_Window.H: No such file or directory的解决
- STM32F103的FLASH代码
- BZOJ3155: Preprefix sum【线段树】
- 华为比苹果更需要 AR 眼镜
- ISACA与南京审计大学合作一周年,“ISACA南审校园日”在宁举行