首页 > 其他分享 >【LeetCode】最小处理时间

【LeetCode】最小处理时间

时间:2023-10-09 09:24:46浏览次数:24  
标签:10 tasks 20 处理 最小 processorTime 处理器 下标 LeetCode

题目

你有 n 颗处理器,每颗处理器都有 4 个核心。现有 n * 4 个待执行任务,每个核心只执行 一个 任务。

给你一个下标从 0 开始的整数数组 processorTime ,表示每颗处理器最早空闲时间。另给你一个下标从 0 开始的整数数组 tasks ,表示执行每个任务所需的时间。返回所有任务都执行完毕需要的 最小时间 。

注意:每个核心独立执行任务。

 

示例 1:

输入:processorTime = [8,10], tasks = [2,2,3,1,8,7,4,5]
输出:16
解释:
最优的方案是将下标为 4, 5, 6, 7 的任务分配给第一颗处理器(最早空闲时间 time = 8),下标为 0, 1, 2, 3 的任务分配给第二颗处理器(最早空闲时间 time = 10)。 
第一颗处理器执行完所有任务需要花费的时间 = max(8 + 8, 8 + 7, 8 + 4, 8 + 5) = 16 。
第二颗处理器执行完所有任务需要花费的时间 = max(10 + 2, 10 + 2, 10 + 3, 10 + 1) = 13 。
因此,可以证明执行完所有任务需要花费的最小时间是 16 。
示例 2:

输入:processorTime = [10,20], tasks = [2,3,1,2,5,8,4,3]
输出:23
解释:
最优的方案是将下标为 1, 4, 5, 6 的任务分配给第一颗处理器(最早空闲时间 time = 10),下标为 0, 2, 3, 7 的任务分配给第二颗处理器(最早空闲时间 time = 20)。 
第一颗处理器执行完所有任务需要花费的时间 = max(10 + 3, 10 + 5, 10 + 8, 10 + 4) = 18 。 
第二颗处理器执行完所有任务需要花费的时间 = max(20 + 2, 20 + 1, 20 + 2, 20 + 3) = 23 。 
因此,可以证明执行完所有任务需要花费的最小时间是 23 。
 

提示:

1 <= n == processorTime.length <= 25000
1 <= tasks.length <= 105
0 <= processorTime[i] <= 109
1 <= tasks[i] <= 109
tasks.length == 4 * n

思路

为了使整体时间最小,那么大的tasks要和小的processorTime配在一起。

代码

def minProcessingTime(self, processorTime: List[int], tasks: List[int]) -> int:
    n = len(processorTime)
    processorTime.sort()
    tasks.sort(reverse=True)
    res = 0
    for i in range(4 * n):
        res = max(res, processorTime[i // 4] + tasks[i])
    return res

标签:10,tasks,20,处理,最小,processorTime,处理器,下标,LeetCode
From: https://www.cnblogs.com/basilicata/p/17750691.html

相关文章

  • 算法训练day29 LeetCode 39.40.131
    算法训练day29LeetCode39.40.13139.组合总和题目39.组合总和-力扣(LeetCode)题解代码随想录(programmercarl.com)classSolution{private:vector<vector<int>>result;vector<int>path;voidbacktracking(vector<int>&candidates,......
  • 几种平滑处理方法
    转自:https://www.cnblogs.com/sophia-hxw/p/5687007.html平滑,也可叫滤波,或者合在一起叫平滑滤波,平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的大小与平滑的效果......
  • [异常处理]rabbitMQ 消费端异常进入死循环-消费消息时候抛出错误,控制台一直刷
    消费端一直在循环消费消>报错->消费.问题点也能想的来,因为默认是自动应答,异常了相当于是没有应答,然后就一直异常重新抛回队列进行投递.解决方案:第一种方法:对可能发生异常的部分try、catch;只要事先将问题catch住,就证明消费端已经将该问题消费掉,然后该消息就不存在于队列中......
  • java中的异步任务处理和Feature接口
    简介Java并发包提供了一套框架,大大简化了执行异步任务所需要的开发。框架引入了“执行服务”的概念,封装了任务执行的细节,对任务提交者而言,他可以关注任务本身,如提交任务、获取结果、取消任务。而不用关注任务执行的细节。基本接口①Runnable和Callable:表示要执行的任务②Exc......
  • JavaScript实现大文件分片上传处理
    很多时候我们在处理文件上传时,如视频文件,小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1、文件过大,超出服务端的请求大小限制;2、请求时间过长,请求超时;3、传输中断,必须重新上传导致前功尽弃这些问题很影响用户的体验感,所以下面介绍一种基于原生JavaScript进......
  • 文件处理工具
    packagecom.thtf.zwdsj.fangjia.utils;importcom.thtf.zwdsj.code.common.exception.CommonException;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.io.IOUtils;import......
  • 【多线程笔记】多线程处理队列数据
    usingSystem.Collections.Concurrent;usingSystem.Diagnostics;{intthreadCount=20;List<Task>tasks=newList<Task>();ConcurrentQueue<int>queues=newConcurrentQueue<int>();for(inti=0;i<1000;i++)......
  • 直播平台制作,vue-全局过滤器(时间,年月日,一千加逗号处理)
    直播平台制作,vue-全局过滤器(时间,年月日,一千加逗号处理)exportconstformatYmd=(date)=>{ lettime=newDate(date)  lety=time.getFullYear() letm=time.getMonth()+1 letd=time.getDate()  return[y,m,d].map((v)=>String(v).padStart(2,'0'......
  • JavaScript实现大文件分片上传处理
    我可以为你讲解如何实现JavaScript实现大文件分片上传处理,以下是具体的攻略步骤:步骤1:选择文件在实现大文件分片上传之前,第一步需要让用户选择一个文件。你可以在页面上加入一个文件选择表单,如下所示:<inputtype="file"name="file"id="file">步骤2:对文件进行分片处理当用户......
  • 03_错误处理与测试
    1.错误处理机制Go语言内置了一些错误接口,包括有error接口,内置Error()方法返回一个字符串;我们可以通过自定义异常处理结构体来实现自定义异常信息。比如自定义除法运算的除0异常:packagemainimport"fmt"//定义一个DividerError结构typeDividerErrorstruct{ divid......