当前位置:网站首页>LeetCode 1986. 完成任务的最少工作时间段 每日一题
LeetCode 1986. 完成任务的最少工作时间段 每日一题
2022-07-07 15:32:00 【@小红花】
问题描述
你被安排了 n 个任务。任务需要花费的时间用长度为 n 的整数数组 tasks 表示,第 i 个任务需要花费 tasks[i] 小时完成。一个 工作时间段 中,你可以 至多 连续工作 sessionTime 个小时,然后休息一会儿。
你需要按照如下条件完成给定任务:
如果你在某一个时间段开始一个任务,你需要在 同一个 时间段完成它。
完成一个任务后,你可以 立马 开始一个新的任务。
你可以按 任意顺序 完成任务。
给你 tasks 和 sessionTime ,请你按照上述要求,返回完成所有任务所需要的 最少 数目的 工作时间段 。测试数据保证 sessionTime 大于等于 tasks[i] 中的 最大值 。
示例 1:
输入:tasks = [1,2,3], sessionTime = 3
输出:2
解释:你可以在两个工作时间段内完成所有任务。
- 第一个工作时间段:完成第一和第二个任务,花费 1 + 2 = 3 小时。
- 第二个工作时间段:完成第三个任务,花费 3 小时。
示例 2:输入:tasks = [3,1,3,1,1], sessionTime = 8
输出:2
解释:你可以在两个工作时间段内完成所有任务。
- 第一个工作时间段:完成除了最后一个任务以外的所有任务,花费 3 + 1 + 3 + 1 = 8 小时。
- 第二个工作时间段,完成最后一个任务,花费 1 小时。
示例 3:输入:tasks = [1,2,3,4,5], sessionTime = 15
输出:1
解释:你可以在一个工作时间段以内完成所有任务。
提示:
n == tasks.length
1 <= n <= 14
1 <= tasks[i] <= 10
max(tasks[i]) <= sessionTime <= 15来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-number-of-work-sessions-to-finish-the-tasks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Java
class Solution {
public int minSessions(int[] tasks, int sessionTime) {
Arrays.sort(tasks);
int n = tasks.length;
int left = 1;
int right = n;
while(left < right){
int mid = (left + right) >> 1;
int[] timeParagraph = new int[mid];
if(dfs(n - 1,tasks,timeParagraph,mid,sessionTime)){
right = mid;
}else {
left = mid + 1;
}
}
return left;
}
public boolean dfs(int index,int[] tasks,int[] timeParagraph,int mid,int sessionTime){
if(index == -1) return true;
boolean[] visible = new boolean[sessionTime + 1];
//遍历每一个时间段
for(int i = 0;i < mid;i++){
//如果前面桶的值已经出现过,就可以跳过该桶,向下一个桶内尝试放入
if(visible[timeParagraph[i]]) continue;
visible[timeParagraph[i]] = true;
int t = timeParagraph[i] + tasks[index];
if(t <= sessionTime){
timeParagraph[i] = t;
if(dfs(index - 1,tasks,timeParagraph,mid,sessionTime)) return true;
timeParagraph[i] -= tasks[index];
}
}
return false;
}
}边栏推荐
- 最新2022年Android大厂面试经验,安卓View+Handler+Binder
- 一文读懂数仓中的pg_stat
- "The" "PIP" "entry cannot be recognized as the name of a cmdlet, function, script file, or runnable program."
- Talk about the realization of authority control and transaction record function of SAP system
- OpenGL personal notes
- Prediction - Grey Prediction
- LocalStorage和SessionStorage
- laravel中将session由文件保存改为数据库保存
- Three. JS series (2): API structure diagram-2
- 【MySql进阶】索引详解(一):索引数据页结构
猜你喜欢

Interface oriented programming

Binary search tree (basic operation)

二叉搜索树(特性篇)

【C 语言】 题集 of Ⅹ

DNS 系列(一):为什么更新了 DNS 记录不生效?

Lowcode: four ways to help transportation companies enhance supply chain management

A tour of gRPC:03 - proto序列化/反序列化

Opencv configuration 2019vs

Personal notes of graphics (4)

AutoLISP series (1): function function 1
随机推荐
null == undefined
Three. JS series (3): porting shaders in shadertoy
Laravel constructor and middleware execution order
Laravel changed the session from file saving to database saving
DNS 系列(一):为什么更新了 DNS 记录不生效?
Interface oriented programming
在哪个期货公司开期货户最安全?
[Android -- data storage] use SQLite to store data
低代码(lowcode)帮助运输公司增强供应链管理的4种方式
【PHP】PHP接口继承及接口多继承原理与实现方法
URL和URI的关系
01tire+链式前向星+dfs+贪心练习题.1
【医学分割】attention-unet
typescript ts 基础知识之类型声明
Horizontal and vertical centering method and compatibility
How does laravel run composer dump autoload without emptying the classmap mapping relationship?
Set the route and optimize the URL in thinkphp3.2.3
Prediction - Grey Prediction
typescript ts基础知识之tsconfig.json配置选项
Pycharm terminal enables virtual environment