文章目录

  • 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相关推荐

  1. leetcode 1723.完成所有工作的最短时间 - 二分+递归

    leetcode 1723.完成所有工作的最短时间 - 二分+递归 题干 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有 ...

  2. LeetCode 1723 完成所有工作的最短时间 题解

    LeetCode 1723 完成所有工作的最短时间 题解 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给 ...

  3. leetcode 1723. 完成所有工作的最短时间(二分+剪枝+回溯)

    给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给工人,且每项工作只能分配给一位工人.工人的 工作时间 是完 ...

  4. LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 状态压缩DP 265 / 3871, 前6.85% 前3题题解: LeetCode 5649. 解码异或后的数组(位运算) LeetCode ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. [leetcode每日一题2021/5/8]1723. 完成所有工作的最短时间

    1723. 完成所有工作的最短时间 题目 思路 动态规划 状态转移方程 优化 求和打表 快速枚举每种选取情况jjj的子集ppp 代码 算法复杂度 题目来源于leetcode,解法和思路仅代表个人观点. ...

  7. LeetCode每日一题: 1723. 完成所有工作的最短时间

    1723. 完成所有工作的最短时间 题目 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工作都应该分配给工人,且每项工作 ...

  8. Leetcode-二分+递归/回溯-1723. 完成所有工作的最短时间

    题目1723. 完成所有工作的最短时间: 题解: 递归回溯模板超时 按照模板+简单剪枝,超时 class Solution { private:vector<int> sum;int mi ...

  9. 1723. 完成所有工作的最短时间

    原题链接:1723. 完成所有工作的最短时间 solution:         dfs + 回溯 + 剪枝 ①结束条件:任务分配完成,maxt保存所有工人的最大工作时长,再用maxt和以前的最大工作 ...

最新文章

  1. B样条曲线 及 B样条曲面
  2. 一文详解C++文件读写(FileStorage、txt)
  3. 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
  4. linux之awk命令解读
  5. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
  6. [linux]makefile使用
  7. 334. Increasing Triplet Subsequence
  8. 详解c++[指针的指针] 和 [指针的引用]
  9. android textwatcher 获取当前控件,android api解析之TextWatcher
  10. [工具书]IntelliJ IDEA社区版下载及配置 - ZIP版
  11. strcmp()函数
  12. 初学者c语言编程软件_初学者的C编程语言
  13. Android之——多媒体开发视频格式
  14. 2021-08-29 网安实验-网络协议栈渗透测试之DDOS攻击之CC攻击
  15. 算法入侵,不如拥抱、打造更好的个性化推荐系统?
  16. STC15 串口一 接收 发送 基本程序
  17. 农村信息综合展示平台(微信网页)项目开发笔记三——朋友圈开发遇到的问题
  18. 【macOS 个性化技巧】如何更换 macOS Mojave 登陆界面背景图?
  19. 车贴服务器维修,汽车衡的故障分析及处理
  20. 【干货】百度清风算法中标后我是如何恢复的

热门文章

  1. PS油画特效插件AKVIS Artwork for mac
  2. CocosCreator幼麟麻将搭建步骤
  3. 史上最全推广小程序实操方法
  4. 概念(航天):LEO,MEO,GTO,GEO,IGSO,SSO
  5. Java程序员考研失败后的面试经历,oppo、VIVO、等面经
  6. 计算机相关专业学历重要么?
  7. 微信请勿打扰昵称,个性好看,来看看!
  8. C语言 代码 九九乘法表
  9. matlab 图片叠加
  10. 云原生安全之RASP技术(应用运行时自我保护)