(leetcode)1723. 完成所有工作的最短时间 -2021/5/8
文章目录
- 1723. 完成所有工作的最短时间 javascript
1723. 完成所有工作的最短时间 javascript
题目:
给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间。
请你将这些工作分配给 k 位工人。所有工作都应该分配给工人,且每项工作只能分配给一位工人。工人的 工作时间 是完成分配给他们的所有工作花费时间的总和。请你设计一套最佳的工作分配方案,使工人的 最大工作时间 得以 最小化 。
返回分配方案中尽可能 最小 的 最大工作时间 。
example:
输入:jobs = [3,2,3], k = 3
输出:3
解释:给每位工人分配一项工作,最大工作时间是 3 。
示例 2:输入:jobs = [1,2,4,7,8], k = 2
输出:11
解释:按下述方式分配工作:
1 号工人:1、2、8(工作时间 = 1 + 2 + 8 = 11)
2 号工人:4、7(工作时间 = 4 + 7 = 11)
最大工作时间是 11 。
思路: javascript
但当提交代码后,发现存在问题,对于[12,13,14,17,25] 3 的情况不正确。
代码: 错误代码
var minimumTimeRequired = function(jobs, k) {let len = jobs.length;// 如果jobs的长度小于等于工人数的话,那么就最小的最大工作时间就是数组的最大值if(len<=k) return Math.max.apply(null,jobs);// 否则的话就需要寻找jobs中最小的组合let sum = eval(jobs.join('+'))// 向上取整let ave = Math.ceil(sum / k); // 向下取整let ave_b = Math.floor(sum / k); if(k==2 & sum % k == 0) return ave;// 根据工人数量k去创建一个全为0的数组,然后根据sum/k的值去进行后续判断let time = new Array(k).fill(0);time[0] = jobs[0]jobs.splice(0,1) // console.log('after',time)// 如果ave-times[i]在jobs中存在,则time[i]+(ave-time[i])for(let i=0;i<k;i++){let sub = ave - time[i]// console.log('sub',sub)if(jobs.indexOf(sub) != -1){time[i] += subjobs.splice(jobs.indexOf(sub),1) // console.log('jobs-after',jobs)}else if(jobs.indexOf(sub) == -1 & jobs.indexOf(ave_b - time[i])!=-1){let temp_s = jobs.indexOf(ave_b - time[i])// console.log(i,time[i],ave_b-time[i],jobs.indexOf(ave_b - time[i]))time[i] += ave_b - time[i]jobs.splice(temp_s,1)// console.log('jobs-after',jobs)}else{time=time.concat(jobs);jobs.splice(0,jobs.length); }}// console.log('time-after',time)// console.log('jobs-after',jobs)return Math.max.apply(null,time);
};
以下是大佬的正确解法:
- 暴力求所有分配方式,然后计算最小值就好
- 回溯模板,然后剪枝(存在多个相同工作时间的工人,分配下一个工作时不需要重复尝试,都是一样的,剪掉)
- 当前已经有一个解的情况,工人分配完工作的时间超出这个解,肯定不是最优,剪掉
var minimumTimeRequired = function (jobs, k) {// 记录每个工人的工作时间var record = new Array(k).fill(0);var min = Infinity;function backtrack(index) {// 得到一种分配方式,更新最优解if (index >= jobs.length) {min = Math.min(min, Math.max(...record));return;}var cache = {};// 尝试将工作分配给不同的工人for (var i = 0; i < record.length; i++) {// 剪枝,相同工作时间不需要再次尝试var n = record[i];if (cache[n]) continue;cache[n] = 1;// 剪枝,工作时间超过了当前的最优解if (record[i] + jobs[index] > min) continue;// 改变状态record[i] += jobs[index];// 递归backtrack(index + 1);// 回溯,还原状态record[i] -= jobs[index];}}backtrack(0);return min;
};
大佬的描述
学艺不精,还需努力
(leetcode)1723. 完成所有工作的最短时间 -2021/5/8相关推荐
- leetcode 1723.完成所有工作的最短时间 - 二分+递归
leetcode 1723.完成所有工作的最短时间 - 二分+递归 题干 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有 ...
- LeetCode 1723 完成所有工作的最短时间 题解
LeetCode 1723 完成所有工作的最短时间 题解 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给 ...
- leetcode 1723. 完成所有工作的最短时间(二分+剪枝+回溯)
给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给工人,且每项工作只能分配给一位工人.工人的 工作时间 是完 ...
- LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 状态压缩DP 265 / 3871, 前6.85% 前3题题解: LeetCode 5649. 解码异或后的数组(位运算) LeetCode ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- [leetcode每日一题2021/5/8]1723. 完成所有工作的最短时间
1723. 完成所有工作的最短时间 题目 思路 动态规划 状态转移方程 优化 求和打表 快速枚举每种选取情况jjj的子集ppp 代码 算法复杂度 题目来源于leetcode,解法和思路仅代表个人观点. ...
- LeetCode每日一题: 1723. 完成所有工作的最短时间
1723. 完成所有工作的最短时间 题目 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给工人,且每项工作 ...
- Leetcode-二分+递归/回溯-1723. 完成所有工作的最短时间
题目1723. 完成所有工作的最短时间: 题解: 递归回溯模板超时 按照模板+简单剪枝,超时 class Solution { private:vector<int> sum;int mi ...
- 1723. 完成所有工作的最短时间
原题链接:1723. 完成所有工作的最短时间 solution: dfs + 回溯 + 剪枝 ①结束条件:任务分配完成,maxt保存所有工人的最大工作时长,再用maxt和以前的最大工作 ...
最新文章
- B样条曲线 及 B样条曲面
- 一文详解C++文件读写(FileStorage、txt)
- 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
- linux之awk命令解读
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
- [linux]makefile使用
- 334. Increasing Triplet Subsequence
- 详解c++[指针的指针] 和 [指针的引用]
- android textwatcher 获取当前控件,android api解析之TextWatcher
- [工具书]IntelliJ IDEA社区版下载及配置 - ZIP版
- strcmp()函数
- 初学者c语言编程软件_初学者的C编程语言
- Android之——多媒体开发视频格式
- 2021-08-29 网安实验-网络协议栈渗透测试之DDOS攻击之CC攻击
- 算法入侵,不如拥抱、打造更好的个性化推荐系统?
- STC15 串口一 接收 发送 基本程序
- 农村信息综合展示平台(微信网页)项目开发笔记三——朋友圈开发遇到的问题
- 【macOS 个性化技巧】如何更换 macOS Mojave 登陆界面背景图?
- 车贴服务器维修,汽车衡的故障分析及处理
- 【干货】百度清风算法中标后我是如何恢复的